Pergunta

Originalmente havia o objeto DAL que minha BO é chamado para informações e, em seguida, passou a UI. Então eu comecei a perceber código reduzida em UI e havia aulas controlador. Qual é a recomendação decente.

Eu atualmente estruturar meu

Public Class OrderDAL

    Private _id Integer
    Private _order as Order

    Public Function GetOrder(id as Integer) as Order

        ...return Order

    End Function

End Class

então eu tenho classes do controlador (recentemente implementado este estilo)

Public Class OrderController

    Private Shared _orderDAL as new OrderDAL

    Public Shared Function GetOrder(id) As Order

        Return _orderDAL.GetOrder(id)

    End Function

End Class

Em seguida, no meu aplicativo

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

Eu originalmente descobriu que com a Classe I Shared não tem que manter a criação de uma nova instância do DAL sempre que eu preciso para buscar dados

Dim _orderDAL as New OrderDal

_orderDAL.GetOrder(1234)

.....

Qual a sua opinião?

Graças

Foi útil?

Solução

Eu usei a sua solução no passado, eo único problema que eu enfrentei é que os métodos "estáticas" "compartilhada" ou não fazer herança apoio. Quando seu aplicativo cresce, você pode muito bem precisa para suportar diferentes tipos de "OrderControllers".

A forma estabilished de suportar diferentes OrderControllers seria, em teoria, para criar uma fábrica:

OrderControllerFactory.ConfiguredOrderController().GetOrder(42);

O problema aqui é: que tipo é retornado por "ConfiguredOrderController ()"? Porque ele deve ter o estático "GetOrder (id int)" método - e métodos estáticos não são suportados por herança ou interfaces. A maneira de contornar isso não é a métodos uso estáticos na classe OrderController.

public interface IOrderController
{
    Order GetOrder(int Id)
}

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

e

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

Assim, provavelmente você vai ser melhor fora usando métodos não-estáticos para o controlador.

Outras dicas

Eu acho que existem várias alternativas listadas neste excelente livro: Patterns of Enterprise Application Architecture . Alguns padrões que possam ser de interesse para você:

Bem, sua aplicação não deve ser instanciar versões separadas dos dados acces camada, então você tem que sob controle. O código Psuedo você postou é realmente difícil de ler embora.

A questão é, qual é a sua camada de acesso a dados, e quanto está lá? Isso vai ditar um bom bocado do que você faz. Se o seu persiting para um arquivo, em seguida, eu acho que o que você escreveu é bom, e se você precisa compartilhá-lo com outros controladores no seu sistema, é possível embrulhar o item em um singelton (estremecimento).

Se você realmente está fazendo o processamento de pedidos e persistindo volta para um banco de dados, eu pessoalmente acho que é hora de olhar para um ORM. Estes pacotes irão lidar com os aspectos Crum para você e reduzir o número de itens que você tem de manter.

My $ .02, e eu reservamos o direito de rever a minha resposta uma vez que eu ver um exemplo melhor.

Eu não posso falar para os detalhes VB, porque eu não sou um desenvolvedor VB, mas:

O que você está fazendo é uma boa prática bem estabelecida, separando a camada de GUI / apresentação da camada de dados. Incluindo código de aplicação real em métodos de eventos GUI é uma (infelizmente também bem estabelecida) má prática.

Sua classe controlador lembra os ponte padrão que também é uma boa idéia se as duas camadas deve ser capaz de mudar a sua forma sem o outro saber sobre ele.

Vá em frente!

É uma boa prática - especialmente quando você chegar a um ponto em que o controlador terá de fazer mais do que simples delegação à DAL subjacente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top