У меня есть возможность представить NHibernate моей группе, используя его с некоторыми новыми компонентами, которые добавляются в устаревшее приложение. Я пытаюсь разобраться, используя шаблон DAO с NHibernate, и я озадачен архитектурным вопросом.
В моем вымышленном примере, скажем, у меня есть CarDAO и сущность Car:
public interface CarDAO {
Car FindById(int id)
... // everything else
}
public interface Car {
... various properties and methods
}
У меня должна быть возможность перевести автомобиль на правостороннее управление. Поскольку это будет очень сложная операция, мне нужно выполнить хранимую процедуру. Мне неясно, куда должен идти метод ConvertToRightHandDrive ().
Для меня имеет смысл поместить метод в Car и позволить ему вызывать метод в CarDAO, который будет выполнять хранимую процедуру. И вот тут мне непонятно:
- должен ли Car иметь ссылку на CarDAO и вызывать CarDAO.ConvertToRightHandDrive?
- должен ли быть какой-то слой CarService, который вызывает CarDAO.ConvertToRightHandDrive?
- как насчет внедрения CarDAO с помощью метода на Car (Car.ConvertToRightHandDrive (carDAO))
- какой-то другой вариант?
Возможно, это только религиозный аргумент, и люди расходятся во мнениях относительно того, должна ли Организация ссылаться на свой DAO (или любой другой DAO, в этом отношении). Я искал StackOverflow в течение некоторого времени и видел несколько дискуссий по этой теме; но мне было бы интересно узнать мнение людей по этому конкретному сценарию.