Я портирую наш старый API на основе Active-Record на новую структуру, чтобы упростить модульное тестирование и т. Д. Мы используем шаблон репозитория для нашего доступа к данным и StructureMap для внедрения зависимостей.
Сейчас я немного борюсь с тем, как все структурировать. Используя в качестве примера наш класс «Product», ранее у нас были части модели, репозитория и фабрики, встроенные в объект product, например, для загрузки, редактирования и сохранения продукта, который мы могли бы сделать (упрощенно): -
Dim p As New Product
If(p.Load(1))
p.Name = "New Name"
p.Save()
End If
И чтобы получить коллекцию объектов, у нас был метод Shared (static) для объекта, который действовал как базовая фабрика
Dim arrProds = Product.GetProducts()
Посмотрев на несколько примеров, в нашей новой структуре мы теперь имеем IProductRepository, IProductService (который является фабрикой) и класс модели продукта. Итак, как-то так
Dim prodSvc = ObjectFactory.GetInstance(Of IProductService)
Dim prod = prodSvc.GetProduct(1) //Prod is an Instance of 'Product'
prod.Name = "New Name"
prodSvc.Save(prod)
Однако класс Product имеет возможность загружать связанные данные, например
Dim arrRelatedProds = prod.RelatedProducts
Который внутри класса Product выглядит следующим образом
Class Product
Function RelatedProducts() As IList(Of Product)
// prodSvc is an instance of IProductService which is passed into the
// Product class in the constructor (or via Dependency Injection)
Return Me.prodSvc.GetRelatedProducts(Me.ProductID)
End Function
End Class
Мне это не нравится, потому что это сложно проверить, и потому, что мне не нравится тот факт, что мой класс Model (Product) напрямую вызывает класс IProductService.
У кого-нибудь есть предложения по улучшению структуры всего этого?
Приветствия
Джеймс
EDIT
Вероятно, не в то время года, чтобы спросить это! Могу ли я добавить какие-либо разъяснения, чтобы сделать этот вопрос ответственным ??