2012-04-28 4 views
1

데이터베이스에서 데이터를 관리하기위한 모든 방법을 갖춘 일반 라이브러리를 만들려고합니다.더 나은 액세스 방법 구성하기

이 라이브러리에는 많은 방법이 있으므로 더 체계적으로 만들고 싶습니다. 다음 구문과 함께 사용하고 싶습니다.

db.setData().insertNewAccount(username, password); 

db.modifyData().deleteAccount(username, password); 

db.getData().getAccount(); 

setData를 입력하면 setData와 관련된 메소드가 표시됩니다. 어떻게 작동합니까?

+0

제목 앞에 "C#"등을 붙이지 마십시오. 그것이 바로 태그입니다. –

답변

1

, 당신은이 같은 (의사 코드)를 할 수

var db = new DataRepository(); 

db.setData().insertNewAccount(username, password); 

db.modifyData().deleteAccount(username, password); 

db.getData().getAccount(); 
+0

고마워요.하지만 "정말로이 방법으로하고 싶다면"코드를 구성하는 더 좋고 표준적인 방법이 있다는 것을 의미합니까? 이 클래스에는 약 60 개의 메소드가 있습니다. 객체 이름 다음에 점을 누르면 그 이름을 볼 수 없습니다. – Arya

+0

나는 그 줄을 쓸 때 Jon Skeet의 대답을 염두에 두었습니다.) 각 CRUD 작업에 대한 클래스보다는 각 비즈니스 클래스에 대해 하나의 저장소를 수행했을 것입니다. 하지만이 작품 =) –

+0

"클래스 SetDataHelper"공개해야합니까? 공개하지 않고 빌드하려고하면 다음과 같은 컴파일 오류가 발생할 수 있습니다. – Arya

3

잘못된 방식으로 접근하고있는 것처럼 들리지만 일반적으로 AccountRepository 클래스에 계정과 관련된 모든 구성원이 있습니다. 그러면 기사와 관련된 모든 멤버와 함께 ArticleRepository 클래스를 가질 수 있습니다. 즉

, 당신이 아니라 당신이 업데이 트를 가져 오기 위해 노력하고 있는지에 비해 다루고있는 데이터의 종류로 구성, 삽입하는 등

은 그럼 당신은 의존성 주입을 사용할 수 있도록 각 사업 클래스에는 사용되는 리포지토리 만 제공됩니다.

0

다른 기능을 사용하여 다른 인터페이스를 만들 수 있으며 클래스가 모든 인터페이스를 구현할 수 있습니다. 그런 다음 setData()은 클래스 자체를 반환하고 해당 인터페이스로 전송할 수 있습니다. 예 :

원하는대로 수행하며 물론 프로젝트에 대한 액세스 수정자를 사용합니다. 그리고이 솔루션은 구현 된 인터페이스 함수에 직접 도달하지 못하게하거나, 다른 클래스를 필요로하거나, DB 클래스에 대한 모든 호출을 프록시 처리해야합니다.

class DataRepository 
{ 
    public SetDataHelper setData() 
    { return new SetDataHelper(); } 

    public ModifyDataHelper modifyData() 
    { return new ModifyDataHelper(); } 

    public GetDataHelper getData() 
    { return new GetDataHelper(); } 
} 

class SetDataHelper 
{ 
    public void insertNewAccount(username, password) { ... } 
} 

class ModifyDataHelper 
{ 
    public void deleteAccount(username, password) { ... } 
} 

class GetDataHelper 
{ 
    public Account getAccount() { ... } 
} 

을 그리고 당신은 더 유창하게, 그것을 당신의 방법을 할 수있는 : 당신이 정말로 그것을 그런 식으로하고 싶은 경우