문제

C#으로 제품 배포자를 위한 애플리케이션을 개발한다고 가정해 보겠습니다.

유통업체는 다음 3가지 유형의 거래를 수행합니다.

(1) 들여쓰기

(2) 매도

(3) 주식

나는 다음과 같이 수업을 설계하고 있습니다.

public abstract class Transaction
{
}

public class Indent : Transaction
{
}

public class Sell : Transaction
{
}    

public class Stock : Transaction
{
}

이제 이 세 가지 유형의 정보를 세 개의 별도 테이블에 저장하려면 DA 레이어를 어떻게 디자인해야 합니까?

다음과 같은 별도의 DA 클래스를 만들어야 할까요?

(1) IndentDA
(2) SellDA
(3) StockDA

아니면 단일 수업 TransactionDA 다음을 사용하여 유형을 확인하여 CRUD 작업을 수행합니다. as/is 운영자?

아니면 또 무엇을 할 수 있나요?어떤 제안이 있으십니까?

도움이 되었습니까?

해결책

첫째, CRUD 작업을 수행하기 위해 클래스 내에서 단일 클래스 TransactionDA를 만들고 유형을 확인한 경우 오픈/폐쇄 원리, 그래서 나는 확실히 그 길을 내려 가지 않을 것입니다.

DAL을 구축하는 방법에 대한 제안에 대해서는이 주제에 대해 생각하는 것보다 사람들에 대한 블로그 게시물을 훨씬 더 똑똑하게 따르는 것이 좋습니다.

저장소는 새로운 싱글 톤입니다

저장소는 죽었습니다 : 긴 라이브 리포지토리

살아있는 저장소의 밤

대화는 계속되고 있다고 생각합니다. 그러나 그것은 당신이 시작해야합니다.

다른 팁

나는 nhibernate와 같은 ORM을 사용하여 멀티 테이블 상속 기능을 사용한 다음 직접 걱정할 필요가 없습니다.

여기서는 엔터티 하위 유형을 사용하겠습니다.트랜잭션을 위한 하나의 테이블을 만들고(이전 포스터에서 말했듯이 아마도 다른 용어가 더 나을 것입니다) 거기에 공통된 모든 것을 저장합니다.그런 다음 각 전문화에 대해 하나의 "하위 유형" 테이블을 만듭니다.이러한 하위 유형 테이블에는 기본 테이블("강력한" 엔터티)과 동일한 기본 키와 해당 특정 전문화에 고유한 필드가 있어야 합니다.각 하위 유형은 일대일 방식으로 강력한 엔터티와 관련되며, 하위 유형 끝에는 선택적 참여가 있고 강력한 엔터티 끝에는 필수 참여가 있습니다.

그런 다음 더 쉽게 쿼리할 수 있도록 강력한 엔터티를 모든 엔터티 하위 유형과 결합하는(외부) 뷰를 정의하여 모든 것을 쉽게 "볼" 수 있습니다.

다음은 이를 설정하는 방법에 대한 간단하고 일반적인 예입니다.

create table Employee (
  eid        int primary key,
  first_name text,
  last_name  text not null
)

create table Salaried (
  eid             int primary key,
  annualSalaryUSD money not null
)

create table Hourly (
  eid             int primary key,
  hourlyRateUSD   money not null
)  

데이터가 세 개의 개별 테이블로 들어간다는 것을 알고 있다면 일반적으로 세 개의 개별 DA 클래스가 있습니다.

그러나 테이블이 거의 동일하다면 TransactionDA를 일반화하고 데이터 계층을 단순화 할 수 있습니다. 나는 당신이 당신이 당신이 당신이 당신이 당신의 테이블을 다른 파일이나 다른 파일로 분리 할 것이라는 것을 알고 있다면 이것을 할 것입니다. 그렇지 않으면 아마도 물건을 단순화하고 모든 것을 결합 할 것입니다.

모든 별도의 트랜잭션 유형이없는 한 TransactionDa를 작성하려고하지 마십시오. 극도로 비슷한.

종속성 주입을 사용하고 각각에 대한 DA 클래스를 만들고 CRUD 작업과 동일한 인터페이스 itransactionDa를 구현할 수 있습니다.

public interface ITransactionDA
{
  void Read();
  void Update();
...
}

public class StockDA : ITransactionDA
{
  //implement interface methods
}

Stock stock = new Stock(new StockDA());

나는 그런 일을 할 것이다

public abstract class DistributerTransaction
{
    DistributerDA dataaccess;
}
public class Indent : DistributerTransaction
{
}
public class Sell : DistributerTransaction
{
}
public class Stock : DistributerTransaction
{
}

public abstract class DistributerDA
{
   /*Read();
     Update();*/
}
public class IndentDA : DistributerDA
{
}
public class SellDA : DistributerDA
{
}
public class StockDA : DistributerDA
{
}

확인하십시오 4 개의 디자인 패턴의 갱.

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