Каков общий способ разработки шаблона ООП (доступ к данным)

StackOverflow https://stackoverflow.com/questions/151769

  •  02-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

Dim _orderDAL as New OrderDal

_orderDAL.GetOrder(1234)

.....

Каково ваше мнение?

Спасибо

Это было полезно?

Решение

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

Теоретически, установившимся способом поддержки различных контроллеров заказов было бы создание фабрики:

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()
    {}
}

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

Другие советы

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

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

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

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

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

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

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

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

Вперед!

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top