Хорошие вопросы. Важные вещи, это. В общем, один из лучших способов приблизиться к многоуровневым решениям - взглянуть на интерфейсы. Интерфейсы - это способ предоставления «точек привязки», которые могут служить нескольким полезным целям.
В многоуровневых решениях интерфейсы служат для обеспечения поведения уровней; эффективно определяя ожидаемый набор поведений, вы отделяете реализацию уровней. То есть, до тех пор, пока мой уровень правильно реализует интерфейс, его реализация мне совершенно не нужна.
Я поднимаю этот вопрос (и это актуально), потому что при определении ваших интерфейсов вам также нужно будет определить ваши данные, передаваемые между уровнями. Таким образом, при определении того, что должно происходить между уровнями, вы в конечном итоге определяете, какие данные передаются; и в то же время, определяя строгий набор передаваемых данных.
Важным моментом здесь в отношении сегрегации является то, что между уровнями не следует передавать информацию о реализации уровня. То есть, определяя свой интерфейс и строго следуя реализации, вы должны быть в состоянии сделать его таким, чтобы реализация уровня могла быть переопределена с нуля, зная только об интерфейсе, и могла заменить другую реализацию без проблем.
Знание этого делает вещи простыми; использование Plain Old Objects обычно обеспечивает чистоту и корректность ваших интерфейсов; и это удерживает ваши структуры данных от раздутости. Он также служит для предотвращения соблазна использования некоторой информации о реализации одного уровня на другом уровне.
Конечно, чтобы сделать это правильно, полезно взглянуть на проблему, которую нужно решить; Какой набор операций пользователь захочет сделать? Эти операции обычно сводятся к «глаголам», которые хорошо соответствуют определениям интерфейса, которые определяют контракт, который будут реализовывать бизнес-объекты. Наборы данных, с которыми будут работать ваши бизнес-объекты, будут определять набор представлений, которые вы должны иметь в своей базе данных. Таким образом, вы можете поддерживать чистое разделение.