Здравствуйте, IT, Вы писали:
IT>Здравствуйте, <Аноним>, Вы писали:
А>>Тогда по отдельности, как сделать кошерно и как сделать правильно?
IT>Моё ИМХО — правильно по возможности не порождать внешних по отношению к объекту связи. Например, имеется объект Company. Он инкапсулирует только то, что касается самого объекта: вычисления для которых достаточно данных самого объекта, навигацию по дочерним объектам, базовую валидацию и т.п. Если для выполнения какой-либо операции, типа CalcCreditRisk, требуется вовлечение внешних по отношению к объекту данных или использование других объектов, то такая операция должна выполняться другим объектам. Неважно как он называется, manager, service, controller, whatever. Т.е. в данном конкретном случае мы должны получить что-то типа:
IT>IT>public class Company
IT>{
IT> ...
IT>}
IT>public class CompanyManager
IT>{
IT> public Company GetCompanyByID(int id)
IT> {
IT> }
IT> public void AddCompany(Company company)
IT> {
IT> }
IT> public void UpdateCompany(Company company)
IT> {
IT> }
IT> public void DeleteCompany(Company company)
IT> {
IT> }
IT> public CreditRiskResult CalcCreditRisk(Company company, ...)
IT> {
IT> }
IT>}
IT>
IT>Весь маппинг выполняется в соответствующих методах менеджера, в идеале в специальном слое — DAL.
Понятно, только по-поводу функции CalcCreditRisk хотелось бы прояснить, такой подход правильный если весь процесс расчёта происодит в БД, а как ето будет выглядеть если расчёт производит обработку информации полученной с БД, т.е ета функция имеет свою логику, ето значит она должна находится не в ДАЛ слое, ибо ДАЛ слой может содержать только логику доступа к БД.