문제

원래 내 BO가 정보를 요청한 다음 UI로 전달한 DAL 객체가있었습니다. 그런 다음 UI에서 감소 된 코드를 알아 차리기 시작했고 컨트롤러 클래스가있었습니다. 괜찮은 추천은 무엇입니까?

나는 현재 내 것을 구조화하고있다

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

원래 공유 클래스에서 데이터를 가져와야 할 때마다 새로운 인스턴스를 계속 만들 필요가 없다는 것을 알았습니다.

Dim _orderDAL as New OrderDal

_orderDAL.GetOrder(1234)

.....

당신의 테이크는 무엇입니까?

감사

도움이 되었습니까?

해결책

나는 과거에 당신의 솔루션을 사용했으며, 내가 직면 한 유일한 문제는 "공유"또는 "정적"방법이 상속을 지원하지 않는다는 것입니다. 응용 프로그램이 커지면 다양한 유형의 "OrderControllers"를 지원해야 할 수도 있습니다.

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

따라서 컨트롤러에 비 정적 메소드를 사용하여 더 나을 것입니다.

다른 팁

이 훌륭한 책에는 몇 가지 대안이 나열되어 있다고 생각합니다. 엔터프라이즈 애플리케이션 아키텍처 패턴. 당신에게 관심이있는 몇 가지 패턴 :

응용 프로그램이 데이터 ACCES 계층의 분리 된 버전을 인스턴스화해서는 안됩니다. 게시 한 PSUEDO 코드는 읽기가 어렵습니다.

문제는 데이터 액세스 계층이 무엇이며 얼마가 있습니까? 그것은 당신이하는 일의 좋은 부분을 지시 할 것입니다. 파일에 대한 셔츠를받는다면, 나는 당신이 작성한 내용이 괜찮다고 생각하며, 시스템의 다른 컨트롤러와 공유해야한다면 항목을 Singelton (Shudder)으로 포장 할 수 있습니다.

주문 처리를 실제로하고 데이터베이스로 돌아 가면 ORM을 볼 시간이라고 생각합니다. 이 패키지는 귀하의 CRUM 측면을 처리하고 유지해야 할 품목의 수를 줄입니다.

내 $ .02와 나는 더 나은 예를 보면 대답을 수정할 권리가 있습니다.

VB 개발자가 아니기 때문에 VB 세부 사항에 대해서는 말할 수 없습니다.

당신이하는 일은 GUI/프리젠 테이션 계층을 데이터 계층에서 분리하는 잘 확립 된 모범 사례입니다. GUI 이벤트 방법에 실제 응용 프로그램 코드를 포함시키는 것은 (슬프게도 잘 확립 된) 나쁜 연습입니다.

귀하의 컨트롤러 클래스는 브리지 패턴 두 층이 다른 계층이 다른 사람이 알지 못하고 형태를 변경할 수 있어야하는 경우에도 좋은 생각입니다.

가라!

우수한 관행입니다. 특히 컨트롤러가 기본 DAL에 대한 간단한 대표단 이상을 수행 해야하는 지점에 도달 할 때.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top