У меня часто бывают такие же проблемы, когда мне приходится проектировать свой класс для веб-приложения. Требования следующие:
- ремонтопригодный (например, без копирования-вставки)
- слои полностью разделены (бизнес-уровень не должен знать, какой метод уровня данных используется)
- высокая производительность: не загружайте ненужные данные.
Сначала у меня есть таблица со всеми моими клиентами и их адресами:
Код:
Customer
--Id
--Name
--Address
----City
----ZC
----Street
Теперь я хочу таблицу (на другой странице) со всеми моими клиентами и книгами, которые они купили, у меня есть несколько возможностей:
1 / Я создаю новый класс:
Код:
CustomerWithBooks
--Id
--Name
--Books[]
----ID
----name
PRO: загружаю только полезные данные
Минусы: я создаю свой класс после моего интерфейса, и есть копирование-вставка.
2 / Я добавляю Книги [] в первый класс.
PRO: Все в одном классе, это ремонтопригодно
Минусы: я загружаю адрес даром. Если я не загружаю адрес, я могу: ленивая загрузка, но мне действительно это не нравится, или когда я использую свой класс, я должен знать, какой метод моего DAL я вызвал, и мне не нравится. 1019 *
3 / Я использую наследование:
Код:
ClientBase
--ID
--Name
ClientWithBooks : ClientBase
--Books[]
ClientWithAdress : ClientBase
--Address
PRO: действительно поддерживается, и я не загружаю данные даром
Минусы: что мне делать, если в одном пользовательском интерфейсе я хочу показать книги и адрес?
4 / ?? Я надеюсь, что есть идеальное решение