Каков общий способ проектирования ООП-шаблонов (Доступ к данным) - PullRequest
5 голосов
/ 30 сентября 2008

Первоначально был объект DAL, который мой BO вызывал для информации, а затем передавал в UI. Затем я начал замечать сокращенный код в пользовательском интерфейсе и появились классы Controller. Какая приличная рекомендация.

Я в настоящее время структурирую свой

Public Class OrderDAL

    Private _id Integer
    Private _order as Order

    Public Function GetOrder(id as Integer) as Order

        ...return Order

    End Function

End Class

тогда у меня есть классы контроллеров (недавно реализовал этот стиль)

Public Class OrderController

    Private Shared _orderDAL as new OrderDAL

    Public Shared Function GetOrder(id) As Order

        Return _orderDAL.GetOrder(id)

    End Function

End Class

Тогда в моем приложении

My app Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        msgbox(OrderController.GetOrder(12345).Customer.Name)

    End Sub


End app

Изначально я обнаружил, что с Shared Class мне не нужно было создавать новый экземпляр DAL всякий раз, когда мне нужно извлечь данные

Dim _orderDAL as New OrderDal

_orderDAL.GetOrder(1234)

.....

Что вы берете?

Спасибо

Ответы [ 5 ]

4 голосов
/ 30 сентября 2008

Я думаю, что в этой превосходной книге перечислены несколько альтернатив: Шаблоны архитектуры корпоративных приложений . Некоторые модели, которые могут вас заинтересовать:

0 голосов
/ 30 сентября 2008

Я использовал ваше решение в прошлом, и единственная проблема, с которой я столкнулся, заключается в том, что «общие» или «статические» методы не поддерживают наследование. Когда ваше приложение расширяется, вам вполне может понадобиться поддержка различных типов "OrderControllers".

Утвержденный способ поддержки различных контроллеров OrderOr теоретически заключается в создании фабрики:

OrderControllerFactory.ConfiguredOrderController().GetOrder(42);

Проблема здесь в следующем: какой тип возвращается функцией «ConfiguredOrderController ()»? Потому что он должен иметь статический метод «GetOrder (int id)» - и статические методы не поддерживаются наследованием или интерфейсами. Обходной путь - не использовать статические методы в классе OrderController.

public interface IOrderController
{
    Order GetOrder(int Id)
}

public class OrderController: IOrderController
{
    public Order GetOrder(int Id)
    {}
}

и

public class OrderControllerFactory()
{
    public IOrderController ConfiguredOrderController()
    {}
}

Следовательно, вам, вероятно, будет лучше, если использовать нестатические методы для контроллера.

0 голосов
/ 30 сентября 2008

Это хорошая практика, особенно когда вы попадаете в точку, когда Контроллеру нужно будет делать больше, чем просто делегировать базовый DAL.

0 голосов
/ 30 сентября 2008

Я не могу говорить с деталями VB, потому что я не разработчик VB, но:

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

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

Вперед!

0 голосов
/ 30 сентября 2008

Ну, ваше приложение не должно создавать отдельные версии слоя доступа к данным, так что вы должны это контролировать. Код Psuedo, который вы опубликовали, действительно трудно прочитать.

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

Если вы действительно занимаетесь обработкой заказов и сохраняете их обратно в базу данных, я лично думаю, что пришло время взглянуть на ORM. Эти пакеты будут обрабатывать аспекты CRUM для вас и уменьшать количество элементов, которые вы должны поддерживать.

Мои $ .02, и я оставляю за собой право пересмотреть мой ответ, как только я увижу лучший пример.

...