2014-02-20 4 views
0

У меня есть два проекта, скажем, приложение и данные. У данных есть некоторые методы, которые используются в проекте App, так что проект приложения не должен беспокоиться о каких-либо подключениях к данным/подключения к базе данных и т. Д. Я думаю, что приятные вещи об этом настройке таковы: 1. Данные не имеют зависимости на App и 2. Если бы база данных была изменена, скажем, от MS SQL до Oracle, вам не придется вообще менять проект приложения - просто создайте новый проект Data.Где я должен определить свои интерфейсы для получения хорошей архитектуры?

Похоже, что для всех методов, используемых проектом App для доступа к данным, должен быть определен интерфейс. Таким образом, кто-то может разработать проект приложения, не заботясь о проекте Data, а проекты с разнесенными данными могут быть подключены к проекту приложения, и пока он реализует интерфейс, все будет работать.

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

Я приведу еще один пример: предположим, что приложение является инструментом для продажи в Интернете. Возможно, вам понадобятся два экземпляра одного и того же проекта приложения, один для eBay и один для Amazon. Экземпляр eBay имел бы проект Data, который бы делал вещи с eBay, а экземпляр Amazon имел бы другой проект Data. Как я могу структурировать приложение, чтобы один и тот же компонент приложения мог быть развернут в обоих экземплярах? Правильно ли используется интерфейс?

ответ

0

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

Эта схема позволяет разделить проблемы, упростить модульное тестирование, насмешливость и т. Д.

+0

А я вижу. Таким образом, реализующий объект ссылается на проект интерфейса. Должен ли основной проект ссылаться на проект интерфейса и проект-исполнитель? иначе как вы на самом деле создаете экземпляр класса реализации с основным проектом? – user1886323

0

Если вы хотите, чтобы ваши зависимости были изолированы, самый чистый способ сделать это - это кодировать интерфейс в отдельном проекте AppDataInterface, от которого зависят и приложение, и данные.

Смежные вопросы