Дозвуковой: приведите меня на уровни - PullRequest
3 голосов
/ 16 июня 2009

Это неловко простой n-уровневый вопрос.

Я создал проект DAL в VS2008 с дозвуковым. У него есть класс виджетов, класс widgetcollection и класс widgetcontroller.

Я создал свой проект бизнес-логики (нет, я не могу поместить его в тот же уровень), который ссылается на него. Используя определенные бизнес-критерии, он выбирает коллекцию виджетов в функции, которая возвращает коллекцию виджетов.

Мой вопрос: как мой уровень графического интерфейса привязывает коллекцию к сетке? Я знаю, что коллекция виджетов является действительным источником данных для сетки данных, но как слой GUI знает , что такое виджет и коллекция виджетов ? Конечно, мне не нужно ссылаться на DAL из графического интерфейса, который сводит на нет весь смысл.

Ответы [ 4 ]

0 голосов
/ 19 июня 2009

Во-первых, я не думаю, что это смущающий основной вопрос n-уровня. Это очень интересная тема, и я попытался стимулировать обсуждение на старых Subsonic Forums.

Я разделяю ваше нежелание выставлять мой уровень графического интерфейса в DAL.

Мой уровень графического интерфейса взаимодействует только с BLL, используя словарь и темы моей собственной модели сущностей, и возвращает только мои собственные сущности или списки, а в некоторых случаях таблицы данных.

Мой BLL общается только со слоем MAPping, который сопоставляет выборки, сохранения и т. Д. С соответствующими методами DAL CRUD и преобразует возвращенные типы Subsonic в типы моих сущностей.

При этом я был удивлен тем, сколько Subsonic мне пришлось продублировать, и время от времени я чувствовал, что иду по неправильному пути, теперь я чувствую себя более комфортно, хотя он все еще нуждается в рефакторинге и переработке. *

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

FWIW, я думаю, что вы движетесь по правильному пути, я думаю, что вы должны сделать, хотя решить, как вы хотите определить эти Subsonic типы для вашего GUI.

У Роба интересное обсуждение , которое может вас заинтересовать.

0 голосов
/ 17 июня 2009

Посмотрите документацию по интерфейсу IBindingList в MSDN, у него довольно хороший пример. Создайте, например, класс CustomersList в вашей модели, который использует класс Customer в вашей BLL. Свяжите сетку с экземпляром класса CustomersList. Уровень представления не знает классов дозвуковых таблиц.

0 голосов
/ 17 июня 2009

Вам, вероятно, нужно использовать интерфейс. Вы можете легко создать интерфейс на основе виджета в своем Dal (щелкните правой кнопкой мыши на классе и создайте интерфейс из класса). Затем возьмите интерфейс и добавьте его на уровень бизнес-логики или в отдельный проект только для интерфейсов. После этого вы можете добавить ссылку на интерфейс как в DAL, так и в GUI. Это также может помочь, если вы когда-нибудь измените свое хранилище данных с базы данных на XML и т. Д. И т. Д.

0 голосов
/ 16 июня 2009

(используя SubSonic 2.x) В моих классах BLL у меня есть свойство, которое дает ссылку на объект для соответствующего класса DAL. Моя форма пользовательского интерфейса имеет ссылку на класс BLL, поэтому из формы я могу обращаться к свойствам и методам DAL через .BLL.DAL.xxxx

FWIW, мне никогда не удавалось успешно связать коллекцию SubSonic с DataGridView. В качестве альтернативы я иногда использую метод collection.ToTable () для создания DataTable, а затем связываюсь с ним, или, в качестве альтернативы, я связываюсь вручную, используя .AddRow ()

...