Here is the piece of order system.
And this is hierarchy of order classes in this system
Public MustInherit Class BaseItem
Public Property Id() As Guid
Public Property Sku() As String
Public Property Quantity() As String
Public Property TransactionId() As Integer?
End Class
Public Class SoOrderItem
Inherits BaseItem
Public Property BatchNumber() As String
Public Property Lottable1() As String
Public Property Lottable2() As String
Public Property Lottable3() As String
Public Property Lottable4() As String
End Class
Public Class AsnOrderItem
Inherits BaseItem
Public Property AdditionalInfo() As String
End Class
Public Class BaseOrder
Public Property OrderReference() As String
Public Property PoNumber() As String
Public Property CustomerVat() As String
Public Property CustomerReference() As String
Public Property TransactionType() As String
End Class
Public Class SoOrder
Inherits BaseOrder
Public Property ConsigneeAddress() As String
Public Property ConsigneeContact() As String
Public Property ConsigneeName() As String
Public Property OrderItems() As New List(Of SoOrderItem)
End Class
Public Class AsnOrder
Inherits BaseOrder
Public Property Account() As Account
Public Property SupplierName() As String
Public Property OrderItems() As New List(Of AsnOrderItem)
End Class
And here is confirm classes for them
Public Class SoConfirmation
Private _itransactionService As ITransactionService
Private Sub AssignNewTransactionsToOrderItems(soOrders As IEnumerable(Of SoOrder))
For Each order In soOrders
For Each item In order.OrderItems
If (Not item.TransactionId.HasValue) Then
Dim newTransactionId =
_itransactionService.GenerateTransactionId()
_itransactionService.AssignTransactionToOrderItem(order.OrderReference, item.Sku, item.Id, newTransactionId)
item.TransactionId = newTransactionId
End If
Next
Next
End Sub
Private Sub FilterForConfirmation(soOrders As IEnumerable(Of SoOrder))
For Each order In soOrders
order.OrderItems.RemoveAll(Function(i) _itransactionService.IsTransactionProcessedSuccesfully(order.OrderReference, i.Id))
Next
End Sub
End Class
Public Class AsnConfirmation
Private _itransactionService As ITransactionService
Private Sub AssignNewTransactionsToOrderItems(asnOrders As IEnumerable(Of AsnOrder))
For Each asn In asnOrders
For Each item In asn.OrderItems
If (Not item.TransactionId.HasValue) Then
Dim newTransactionId = _itransactionService.GenerateTransactionId()
_itransactionService.AssignTransactionToOrderItem(asn.OrderReference, item.Sku, item.Id, newTransactionId)
item.TransactionId = newTransactionId
End If
Next
Next
End Sub
Private Sub FilterForConfirmation(asnOrders As IEnumerable(Of AsnOrder))
For Each order In asnOrders
order.OrderItems.RemoveAll(Function(i) _itransactionService.IsTransactionProcessedSuccesfully(order.OrderReference, i.Id))
Next
End Sub
End Class
As you can see confirmation classes have a lot of duplcited code and i don't know how to avoid it ... Will be appreciate for any help.