Как заставить добавление и удаление объектов из структуры сущности через уровень обслуживания? - PullRequest
1 голос
/ 29 ноября 2011

Я пытаюсь решить, как обрабатывать вставки и удаления с помощью MVC3 и Entity Framework 4.2

Моя настройка: веб-сайт обращается к моему сервисному уровню, который использует шаблон репозитория для выборки и возврата моей модели (POCO)объекты.Решение разделено на следующие проекты:

  DAL(Data)
  BAL(Service layer in here)
  MODELS (Poco objects)
  WEBSITE (presentation)

Моя проблема: мне нужно иметь возможность контролировать добавление и удаление объектов и запускать любую бизнес-логику, которая мне нравится.Это должно быть сделано на уровне обслуживания.

Пример проблемы: у меня есть класс Account с ICollection объектов AccountContact.Каждый объект AccountContact имеет ICollection объектов PhoneNumber.Я предполагаю, что это метод Service примерно такой

  AddAcountContact(Account account, AccountContact accountContact){
     //Run business logic to ensure that this account contact can be added
     account.AccountContacts.Add(accountContact);
     unitOfWork.SaveChanges();

  }
  DeleteAccountContact(Account account, AccountContact accountContact){
     //Run business logic to ensure that this account contact can be deleted
     account.AccountContacts.Remove(accountContact);
     unitOfWork.SaveChanges();
  }

К сожалению, у меня нет способа принудительно добавлять и удалять через мой класс Service.Разработчик может легко вставить / удалить непосредственно из уровня представления.У кого-нибудь есть какие-либо идеи или известны общие решения этой проблемы?Возможно, я что-то не так делаю ....

1 Ответ

3 голосов
/ 29 ноября 2011

Если вы предоставляете класс с общедоступным свойством коллекции, допускающим Add и Remove, вы говорите разработчикам, что они могут вызывать эти методы.Вы можете определить политику кодирования и использовать проверку кода, чтобы проверить, что политика соблюдается, но это только обходной путь.Тем не менее, любой может забыть об этом и напрямую вызывать Add или Remove, потому что ваши классы неправильно спроектированы.

Основная проблема здесь - объекты, открытые непосредственно для пользовательского интерфейса.Если вам не нужна прямая модификация объектов в слое пользовательского интерфейса, просто не выставляйте их этому слою.Используйте другой тип (модель DTO / View) с коллекциями «только для чтения», которыми обмениваются уровень сервиса и уровень пользовательского интерфейса, и преобразуйте этот тип в сущность внутри уровня сервиса.Другой вариант - добавить проверку непосредственно к сущностям или пользовательским типам коллекций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...