2015-02-05 2 views
0

프로젝트에는 클래스 모델 클래스가 있습니다 (이 클래스는 modelClass).데이터베이스 작업을 위해 setter 사용

그리고 데이터베이스 (db - Advantage 데이터베이스 아키텍처) 작업을위한 몇 가지 방법을 제공하는 클래스 (dbClass)가 있습니다. 이 클래스는 데이터베이스 작업을위한 정적 메서드를 제공합니다. ORM (EF와 같은), 저장소 패턴을 사용할 수 있다는 것을 알고 있지만이 프로젝트에서는 데이터베이스 작업에 대한 주요 아이디어가 정적 메서드를 사용하는 정적 클래스입니다.

modelClass에는이 필드가 있습니다 ("Status"(문자열 유형)).

필자는 "Status"을 설정하면 유스 케이스가 데이터베이스의 업데이트 레코드입니다. 내가 다른 솔루션을 함께했다

.... 
modelClass.Status = "status"; 
dbClass.update(modelClass); 
.... 

사용

public class modelClass{ 
    //here some fileds 
    public string Status { get; set; } 
    //here some fileds 
} 

public class dbClass{ 
    //here some fileds and method for work with database 
    public static void update(modelClass mClass){ 
     //here update the record in database 
    } 
} 

:

아래 내 솔루션을 볼 수 있습니다.

제 결정의 아이디어는 키워드 "set"을 사용하는 것입니다.

내 생각을 설명해 드리겠습니다. modelClass에 필드를 설정하면 데이터베이스에 필드 및 업데이트 레코드를 설정하려고합니다. 예를 들어

:

public class modelClass{ 
    //here some fileds 
    private string Status { get; set; } 

    //create public setter 
    public string setStatus{ 
     get { return Status; } 
     set 
     { 
      Status = value; 
      dbClass.update(this); 
     } 
    } 

    //here some fileds 
} 

modelClass.setStatus= "status"; 

주요 질문 사용은 다음과 같습니다 세터로 데이터베이스 그것은 좋은 연습 일이

  1. 인가?
  2. 왜이 아이디어를 사용해야합니까/사용하지 않아야합니까?
  3. 나에게 내 생각
+3

[SOLID 원칙 (http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod) 당신의 도움에. 커플 링이 커지므로 문제가 발생할 수 있습니다. 질문 : DB 인터페이스가 변경되면 어떻게됩니까? 데이터베이스없이 수업을 어떻게 테스트합니까? 한 번에 여러 필드를 업데이트하는 트랜잭션이 필요한 경우에는 어떻게해야합니까? –

+2

이것은 너무 광범위하거나 의견을 바탕으로 한 것 같습니다. [C# 속성 가져 오기 도구가 DB에서 읽지 못하는 이유는 무엇입니까?] (http://stackoverflow.com/questions/6682902/why-should-ac-sharp-property-getter-not-read-from-a-db) , [속성은 부작용이 있어야한다] (http://programmers.stackexchange.com/questions/82377/should-properties-have-side-effects) 등등. – CodeCaster

+0

@DmitryLedentsov, 답장을 보내 주셔서 감사합니다. 솔직하게 말해서, 데이터베이스에 변경 사항이있는 경우 어떻게하면이 클래스를 테스트 할 수 있을지 결정할 수 없습니다. 주요 질문에 감사드립니다. 내 솔루션이 나쁘다는 것을 이해했습니다. :) – netwer

답변

2

그래서 어떤 식 으로든 데이터베이스에 매핑되는 클래스와 비즈니스 논리에서 사용되는 클래스를 구분하려고합니다. 그 생각은 좋은 생각입니다. 도메인이 '지속성 무지'인 도메인 구동 디자인에서 찾을 수있는 요소에 대해 생각하고 있습니다. 즉, 어떻게 유지되고 있는지, 어디서 또는 어떤 형식으로 유지되는지는 알 수 없습니다.

그러나 나는 그것을 구현하는보다 우아한 방법이 있다고 생각합니다. 모델 클래스의 dbclass를 '래핑 (wrapping)'함으로써 모델에 대한 의존성 양식을 데이터베이스에 작성하면 피하려고하는 것입니다.

내가 본 것은 모델 클래스와이 모델 클래스의 IRepositories입니다. 저장소의 구현은 지속성 매체에 대해 알고있는 저장소입니다. SQL 서버에 대한 EF로 Azure가 될 수 있습니다.

업데이트의 경우이 repo는 데이터베이스에서 dbclass를 수화 한 다음 제공 한 모델 클래스에서 속성을 업데이트합니다 (호출 할 때). 예를 들어 AutoMapper을 사용하여이 매핑을 처리 할 수 ​​있습니다. 경우 모든 속성은 같은 이름을 가지는 - 그것은 단지 한 줄의 :

OrderDto dto = Mapper.Map<OrderDto>(order); 
+0

아, 내 생각에 빛을 내게해라. :) 그래, 네가 대답 해줘서 고마워. 나는 너의 생각을 생각할 것이다. – netwer

1

아니, 아니에요 좋은 연습의 주요 장점과 단점을 설명해주십시오.

두 가지 이유 :

  1. 그것은 데이터베이스와 오버를 자주 동기화됩니다.
  2. 데이터베이스의 각 열에 대해 수동으로 작성기를 만드는 것은 불편합니다.

일반적으로 ORM 구현에는 리플렉션을 사용하여 모든 속성을 트래버스하는 방법이 있습니다.

또한 '저장'방법을 사용하여 필드를 할당 한 후 데이터베이스에 대한 호출에서 값을 플러시 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. – netwer

관련 문제