2009-04-21 4 views
1

나는 다음 데이터베이스 테이블을 가지고 작업 할 수 있습니다. 그래서 나는 여기에 묻는 줄 알았습니다.클래스 디자인 도움말

assignment 
---------- 
id 
person_id 
assigned_address_id 
position_id 

person 
---------- 
person_id 
current_address_id 
name 
ssn 
drivers_license 

address 
--------- 
id 
address_number 
address_street 
address_city 
address_state 
address_zip 

position 
--------- 
id 
description 
rate 

나는 다음과 같은 클래스

나는 또한 Dal.Repository에 액세스하고 각 개체에 침전물 방법을 수행하는 각 개체에 대한 Seprate 서비스 클래스를 만들었습니다
Person Class 
int? id 
Address currentAddress 
string Name 
string ssn 
string drivers_license 

PersonAssignment Class 
id 
person_id 
Address assignedAddress 
Position assignedPosition 

Address Class 
string address_number 
string address_street 
string address_city 
string address_state 
int address_zip 

Position Class 
int? id 
string description 
double payment_rate 

을 만들었습니다. 즉

PersonService Class 
Update(Person p) 
Insert(Person p) 
GetListOfPeople() 
GetPerson() 

PersonAssignmentService Class 
Update(PersonAssignment p) 
Insert(PersonAssignment p) 
GetListOfPeopleAssignments() 
GetAssignment() 

나는 또한 객체 된 명 할당과 사람의 개인 정보를 모두 포함 내 웹 페이지에

PersonRepository Class 
Update(PersonAssignment p) 
Insert(PersonAssignment p) 
GetListOfPeopleAssignments() 
GetAssignment() 

내가 나 자신 PersonService 및 호출 찾을 각각에 대한 저장소가 PersonAssignmentService.

이것은 많은 작업처럼 보입니다. 내가 뭐 잘못하고 있니? 어쩌면 이처럼 뭔가를 디자인하는 더 간단한 방법이있을 수 있습니다. 어떤 도움

감사

감사

답변

0

데이터베이스 설계 및 클래스는 비판 때로는 어려울 수 있습니다 그것의 대부분은 진짜로 당신의 비즈니스 규칙과 당신이 거래의 유형에 따라 달라집니다.

처음에는 개인 주소에 대한 별도의 테이블이 없으므로 정의하고 지정된 특정 클래스를 만들지 않을 것입니다.

나는

+0

그가 C#을 사용하고있는 것처럼 보입니다. ... – Damovisa

1

당신이해야 할 것은 디자인 (관계형 매핑 객체) 및 데이터 액세스 레이어를 구현 사용하고 있지만, 아마 ORM을 확인하기 위해 당신의 시간 가치가있을 것입니다 어떤 프로그래밍 언어 확실하지 않다 :

http://rlacovara.blogspot.com/2009/02/high-performance-data-access-layer.html

이 기사는 당신이 데이터 액세스 계층을 작성하는 방법을 설명 지금까지 본 그 최고입니다. 저자는 데이터 액세스 레이어에서 비즈니스 레이어 (또는 기본 응용 프로그램 클래스로 변환 할 수있는 다른 레이어)로 데이터를 이동하기 위해 DTO (Data Transportation Objects)를 만들어야한다고 설명했습니다. 그는 Data Transportation Objects, DTO 채우기 코드 및 DTO를 데이터베이스에 저장하는 코드를 도와주는 기본 클래스와 코드를 제공합니다.

시리즈에는 3 개의 기사가 있으며 전체 세트를 읽는 것이 좋습니다.

+0

감사합니다.이 부분을 살펴 보겠습니다. – zSynopsis

0

웹 페이지의 기능을 100 % 확신하지는 못했지만 PersonAssignment Id가 있다고 가정하고 PersonAssignment 객체를 검색 한 다음 Person 객체 자체를 검색하면 다음과 같이 쉽게 만들 수 있습니다.

PersonAssignment 클래스에서 person_id가 아닌 Person 객체를 참조하는 속성을 추가하십시오.귀하의 예제에서 : (I이 매개 변수를 가정)에 GetPersonAssignment 방법에

PersonAssignment Class 
id 
person_id 
Person person 
Address assignedAddress 
Position assignedPosition 

, Person 객체를 채울 수있는 몇 가지 작업을한다. 삽입 및 업데이트 메서드에이 메서드를 추가해야합니다.

0

규칙에 따라 각 사람마다 하나의 주소 만있을 수 있으므로 누군가가 이동하면 주소 테이블에 person_id가 없으므로 마지막 주소를 잃어 버리게됩니다.

하지만 그건 단 정치 마킹입니다.

위에서 언급 한 DAO를 사용하는 것이 좋습니다. 로직을 별도로 유지하십시오.

필자는 DAO 작성부터 시작하여 모든 작업을 수행하고 있는지 확인한 후 다음 계층에서 작업하여 필요한 데이터베이스를 변경할 수 있습니다.

C#을 처음 사용하는 경우 실제 데이터베이스를 추상화하기 위해 데이터베이스 액세스를 단순화하는 많은 변경 사항이 있으므로 .NET 3.5가 제공하는 다양한 도구를 살펴볼 수 있습니다.

이 장점 중 하나는 데이터 원본 중 일부가 XML 파일에서 가져올 수 있으며 데이터 원본의 실제 원본과 관계없이 DAO가 정상적으로 작동한다는 것입니다.

0

서비스 클래스, 리포지토리 및 DAL이있는 다른 사용자가 설계 한 프레임 워크에서 작업하는 것처럼 들리 겠지만 이제는 코드 더미가 커지고 있습니다. "더 쉬운 방법은 없다"고 묻습니다. 짧은 대답은 예입니다. 항상 쉬운 방법이 있습니다. 개발자와 마찬가지로 데이터 액세스를 수행하는 방법에는 여러 가지가 있습니다. 사용중인 모델은 상당히 복잡하며 도메인 기반 디자인의 원칙을 따르는 것처럼 들립니다. DDD는 훌륭한 방법론으로, 뛰어난 분리와 높은 테스트 가능성을 제공합니다. 그러나 또한 많은 배관 코드가 필요하며 대부분의 .Net 프로그래머가 잘 이해하지 못하므로 도움을받는 것이 어려울 수 있습니다. 필자는 이것이 엔터프라이즈 애플리케이션을 구축하는 가장 좋은 방법이라고 생각하지만, OOP를 처음 접한다면 꼭 따라야 할 모델이 아닙니다.

작은 프로젝트를 수행하는 경우 서비스 클래스가없고 리포지토리가 없어도 엔터티 클래스를 포함하는 Common Lib/프로젝트 만 있고 데이터 액세스 방법이 포함 된 DLL을 빌드하는 것이 좋습니다. 엔티티를 직접 채우고 저장합니다.

더 간단한 방법은 엔티티 클래스를 제거하고 DLL에서 엔티티 데이터가 들어있는 ADO.Net DataTable을 반환하도록하는 것입니다. 이 접근법은 엔티티 클래스의 강력한 입력을 잃어 버리지 만 구현하기가 훨씬 쉽습니다.

또 다른 방법은 Entity Framework를 사용하는 것입니다. EF는이 모든 것을 당신을 위해 수행 할 것이고, 강하게 타입 화 된 엔티티 클래스를 생성 할 것입니다. EF에 익숙해지기까지 조금 시간이 걸리지 만 일단 작업 방법을 이해하면 지속성 코드를 작성하는 데 걸리는 시간을 크게 줄일 수 있습니다. EF에 대한 유용한 자습서를 보려면 Rob Bagby's blog