Я боялся, что не получу ответов на свой пост, рад ошибаться!
Я читал эти ссылки раньше, но, вероятно, месяц или более назад, и перечитывание их с тем, что я понимаю сейчас, было очень полезным. Мне действительно нравится сообщение Стива Сандерсона со скользящей шкалой, но хотелось бы, чтобы он показал пример проверки чего-либо в правом конце спектра.
В качестве примера в своем блоге он приводит: «« имена пользователей должны быть уникальными », вероятно, будут применяться в вашей базе данных». Так что это будет что-то вроде:
public static void SavePerson(Person person)
{
// make sure it meets some format requirement
// in this case the object is responsible for validation and the service layer is the caller
person.EnsureValid();
// todo: action to verify username is unique by checking database
// in this case the service layer is responsible for calling and implementing validation
// todo: action to save to database
}
Это имеет смысл и показало бы мою проблему с пониманием того, куда поместить проверку, так как она находится как внутри сервисного уровня (очень уникальное имя), так и в виде объекта просмотра (проверка форматов).
Еще одна проблема, с которой я сталкиваюсь, - это то, что сервисный уровень начинает развиваться с логикой валидации. Может быть, разделить его на другой класс или что-то? В моем случае некоторая логика проверки может быть разделена между службами, поэтому я хотел бы подумать о СУХОМ способе реализации этого. Забавные вещи, чтобы подумать!
Ссылка Эмада Ибрагима хороша тем, что, как только я начну понимать этот процесс немного больше, я собираюсь искать способ генерировать валидацию на стороне клиента с использованием того же набора правил, без необходимости повторять код. У него уже есть это:)
Я слышал о S # arp, но не сел и не увидел, как он работает (я не уверен, что на нем много демоверсий или загрузка кода - это демо!). Я не уверен, что проверки на модели базы данных будет достаточно. Мне кажется, что в отношении базы данных было бы много действительных состояний модели, которые бизнес-логика считала бы недействительными (например, диапазоны дат / должны быть до / после / и т. Д.). Это случаи, которые поражают мой мозг:)
Кроме того, мне понравилась ссылка (прогуглила ее после того, как я увидела, как Эмад ответил на сообщение Стивса с BLL, и понятия не имела, что это значит ... дух):
http://en.wikipedia.org/wiki/Business_logic_layer
Так что я не знал этого, но я думаю, что пишу для этой модели: объект бизнес-процесса, который обрабатывает взаимодействия данных, и бизнес-объекты, которые являются логическими моделями, а не моделями баз данных. Я думаю, что мне нужно начать читать некоторые более фундаментальные шаблоны и практики с этим материалом, чтобы лучше понять концепции (кажется, что многое из этого - то, что пишут люди на Java против людей .NET). Возможно, пришло время сделать шаг назад:)