2009-04-28 7 views
1

Скажем, у меня есть приложение WinForm CRUD (например). Я хочу следовать рекомендациям по этому поводу, поэтому я стараюсь, чтобы он соответствовал ООП и дизайну n-Tiered.Где я могу создать экземпляр объектов в CRUD n-Tiered WinForm App?

К сожалению, я знаком со словами, но не с их практикой. Так что давайте рассмотрим следующий пример: My CaseNote. У меня есть приложение с вкладками, на котором вы переходите на вкладку поиска, чтобы найти участника, а затем один из вариантов - перейти на вкладку CaseNote, чтобы создать новую заметку о заметке, посмотреть существующие заметки CaseNotes или создать контрольную заметку для родителя Заметка. Все это для участника, выбранного на вкладке поиска.

Итак, если я создаю объекты и передаю их вокруг, чтобы их использовали в разных формах, где я должен их создавать? Я думал, что у меня будет 3 слоя; UI, Object, DAL. Там, где я падаю, я нахожу экземпляр объектов. Я не могу привести их в объектный слой, не так ли? Кроме того, если я приведу их в форму, как передать их из формы в форму в довольно большом приложении?

CaseNotes Screen Shot

ответ

2

Если вы хотите посмотреть на еще несколько слов вокруг этой проблемы, которую вы хотите посмотреть на MVP и MVC. (Они предназначены для диспетчера вида модели и презентатора представления модели). Некоторые люди будут стрелять в меня, чтобы сказать это, но они совершенно схожи по понятию.

Цель MVP и MVC - дать вам возможность проектировать логику приложения, даже не задумываясь о вашем приложении. Он также позволяет вам определять взаимодействие с пользователем без реализации реального графического интерфейса. В качестве альтернативы ваша модель - ваша логика приложения, ваши данные, ваши классы, которые на самом деле делают что-то вроде разговоров с вашей базой данных. Ваш ведущий или контроллер - это то, что взаимодействует с вашей моделью и что контролирует ваш пользовательский интерфейс и реагирует на действия пользователя на интерфейсе. Наконец, ваш вид - это ваш дизайн winforms или ваша веб-страница.

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

Первое, что вам нужно сделать, это начать создавать объекты, которые представляют ваши данные. Таким образом, у вас будет объект CaseNote, который содержит данные casenote. У вас будет контейнер данных с заметками, похожий на базу данных заметки. Вы можете определить логические операции и их свойства, как если бы они находились в реальных предметах.

Затем вы перейдете к определению своего ведущего или контроллера, который определит операции, которые вы хотите поддержать из графического интерфейса. В то же время вы должны определить интерфейс, который будет определять для ведущего/контроллера, какие операции могут выполняться в графическом интерфейсе. Так, например, ваш ведущий может выставить метод под названием SearchForCaseNote, который принимает строковый параметр. Интерфейс вашего представления будет вызывать метод DisplayCaseNote. Когда пользователь нажимает кнопку поиска, представление передает команду ведущему, которая затем вызывает модель для получения данных. Ведущий может отформатировать данные в этой точке, то есть преобразовать объект DateTime в строку, а затем передать данные обратно в представление через метод определения интерфейса, называемый DisplayCaseNote.

Вам не нужно использовать интерфейс «Вид», вы можете напрямую обратиться к представлению, но имея интерфейс, вы можете иметь множество различных реализаций представления.

Последнее, что я должен упомянуть, это то, где вы создаете эти разные части приложения. Мое мнение - все, что должно выпадать от ведущего/контроллера. Поэтому, когда вы запускаете приложение, он создает объект презентатора/контроллера, который затем создает и отображает ваше представление, передавая себя как переменную в представление.Ведущий/контроллер может либо создавать исходные модели, загружая их с диска, либо в идеале обнаруживать их через контейнер для инъекций зависимостей, такой как единство. Фактически использование единства для обнаружения реализации представления, вероятно, является лучшей идеей, поскольку это дает вам истинное разделение между представлением и презентатором/контроллером. Когда вы переходите к другому виду (например, открываете другое окно), ваш презентатор/контроллер должен выставлять такой метод, как DisplayDetailPage, который вызывает вызов при нажатии кнопки. Это создаст презентатор/контроллер для следующего представления, которое, в свою очередь, создаст представление и получит ссылку на модель.

Надеюсь, это поможет.