Как сохранить слой «GUI» вне уровня «Business Logic»? - PullRequest
4 голосов
/ 22 апреля 2009

В настоящее время у меня есть проект, который является проектом «Бизнес-объект», и наша цель состоит в том, чтобы иметь четкое разделение между GUI и бизнес-объектами. Тем не менее, мой проект имеет ссылку на System.Windows.Forms , и это большой красный знак всем, что мой проект плохо спроектирован.

Моя проблема в том, что я использую сторонний элемент управления под названием «Active Query Builder». Это буквально «Control», как в GUI, System.Windows.Forms.Control; но он никогда нигде не отображается, добавляется в любую коллекцию элементов управления формы. И он обеспечивает большую часть основных функций бизнес-объекта.

В любом случае, без ссылки на System.Windows.Forms - я не могу использовать сторонний элемент управления, и BO ужасно сломан. Но мне сказали, что я не могу ссылаться на System.Windows.Forms, потому что это плохая практика кодирования.

И я в полном недоумении, что делать.

Может ли кто-нибудь с большим опытом работы с типами шаблонов предложить решение?

Ответы [ 4 ]

6 голосов
/ 22 апреля 2009

Итак, у вас есть библиотека, которая ссылается на WindowsForms, но ничего не использует напрямую? Ваш проект BO не возиться с какой-либо из форм?

Я думаю, что у вас все в порядке, ссылка - это красный флаг, который говорит, подождите, почему я это делаю. Но пока слой все еще логически разделен, то ИМХО все в порядке.

Одна вещь, которую вы можете сделать, это абстрагировать это в другой проект, который будет обрабатывать взаимодействие со сборщиком запросов. Таким образом, ваш проект BO будет работать с проектом Query Builder, который будет знать, как использовать этот элемент управления.

3 голосов
/ 22 апреля 2009

Я могу ошибаться, но System.Windows.Forms просто является частью .NET Framework и фактически не представляет собой GUI. У него может быть много полезных функций, которые вы можете использовать, которые ничего не отображают. Я думаю, кто бы ни сказал, что это не должно использоваться, может быть неправильное понимание принципа.

Если вы разрабатываете n-уровневое приложение, то обычно используется разделение GUI-Business Logic-Data Store, но GUI - это строго пользовательский интерфейс, предоставленный пользователю для обеспечения взаимодействия, а не среда, облегчающая его. 1003 *

2 голосов
/ 22 апреля 2009

Я только слабо знаком с Active Query Builder, но разве это не компонент GUI, который используется для создания SQL-запросов? Я в недоумении, чтобы увидеть, как этот вид компонента вообще относится к бизнес-объектам.

1 голос
/ 22 апреля 2009

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

Это вызывает некоторые опасения, что этот «элемент управления» имеет функции, не связанные с пользовательским интерфейсом; это просто неправильно.

...