Должны ли классы DAL быть публичными? - PullRequest
3 голосов
/ 15 марта 2011

Скажем, у меня есть DAL, который несколько приложений используют для доступа к одним и тем же данным.DAL определяет свои собственные классы и интерфейсы для работы с этими данными, но должны ли приложения, использующие DAL, работать с этими классами или только с интерфейсами?

Другой способ;должно ли это быть:

List<Product> products = MyDAL.Repository.GetProducts();

или:

List<IProduct> products = MyDAL.Repository.GetProducts();

Хорошо или плохо, что каждое приложение, использующее DAL, должно будет создавать свои собственные детали реализации для продукта?

Ответы [ 3 ]

0 голосов
/ 15 марта 2011

Возвращать интерфейсы лучше, но тогда вам потребуется GetProducts (), чтобы знать об этих реализациях, чтобы правильно запрашивать хранилище данных. Возможно, вы захотите использовать для этого инфраструктуру IOC.

0 голосов
/ 15 марта 2011

Передача интерфейсов вместо классов - это одна (очень хорошая) вещь.Делать ваши классы DAL частными - это совсем другое (и не обязательно хорошее) дело.

Например, что если одно из приложений, использующих ваш DAL, захочет слегка изменить поведение Product?Как вы можете создать подкласс или украсить свой оригинальный класс, если он частный?

Скажем, одно из ваших приложений - это веб-приложение, которое должно хранить изображение продукта в виде URL-адреса, а не пути к файлу?Или добавить кеширование, логирование или что-то еще поверх Product?

0 голосов
/ 15 марта 2011

Здесь слишком много вопросов, чтобы определить лучший путь.

Если эти приложения могут повторно использовать дополнительные функциональные возможности, предоставляемые классами в вашем DAL, то я бы сказал, что они абсолютно повторно используются.

Например, «Продукт». Если DAL имеет определение продукта, которое очень близко или совпадает с определением, которое требуется приложениям, тогда повторное использование - ваш лучший выбор.


Если приложения явно НЕ хотят функциональности, предоставляемой классами, а вместо этого хотят предоставить свою собственную реализацию, то просто используйте интерфейсы.

Опять же, смотрите на «Продукт»: если приложения имеют свое собственное определение Продукта с возможно дополнительными или просто другими свойствами и методами, то они должны реализовать интерфейс.


Это действительно вопрос о том, как будут использоваться эти классы.

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