2008-09-17 4 views
7

저는 Person과 같은 것을 표현하기 위해 비즈니스 객체 또는 엔티티를 만드는 개념을 얻습니다. 그런 다음 DTO를 사용하여 Person을 직렬화하여 클라이언트에게 전송할 수 있습니다. 클라이언트가 객체를 변경하면 거기에 IsDirty 플래그가있을 수 있으므로 서버로 다시 전송되면 업데이트 할 것을 알게됩니다.비즈니스 개체의 변경 내용을 추적하는 방법은 무엇입니까?

하지만 주문 개체가 있으면 어떻게 될까요? 여기에는 주 헤더 정보, 고객, 공급자, 필수 날짜 등이 있습니다. 그런 다음 OrderItems가 있습니다.이 항목은 주문할 항목 인 List < OrderItem>입니다. 내 UI에서이 비즈니스 개체를 사용할 수 있기를 원합니다. 그래서 일부 텍스트 상자를 위치, 공급 업체, 필수 날짜 등에 연결하고 그리드를 OrderItems에 연결합니다. OrderItems는 List이므로 레코드를 쉽게 추가하고 삭제할 수 있습니다. 그러나 이것을 어떻게 추적합니까, 특히 삭제 된 항목. 삭제 된 항목이 내 표에 표시되는 것을 원하지 않으며 foreach를 사용하면 삭제 된 항목을 반복 할 수 없습니다. 그러나 삭제가 있었다는 사실을 여전히 추적해야합니다. 변경 사항을 어떻게 추적합니까? 내가 단원을 사용해야한다고 생각해? 그러나 코드는 꽤 복잡해 보입니다. 그렇다면 단순히 DataTables를 사용하지 않고 왜 무료로 변경 내용을 추적하는지 궁금합니다. 그러나 비즈니스 개체가 어떻게 움직이는지를 읽었습니다.

나는 단순한 Person 예제에서 Orders와 같은 헤더 - 디테일 예제가 아니라 다양한 예제를 발견했다.

BTW는이를 위해 C# 3.5를 사용합니다.

답변

-1

데이터 개체는 변경 내용을 추적하지 않습니다. 변경 내용 추적은 DataContext 및 DataContext를 통해 검색 한 개체에서 발생합니다. 내가 코드에서 데이터 컨텍스트를 사용하여 직접 권하고 싶지 않다

public void UpdateOrder(int id, string name) 
{ 
    FooDataContext db = new FooDataContext(); 
    Order order = db.Orders.Where(o=>o.Id == id).FirstOrDefault(); 

    if (order == null) return; 

    order.Name = name; 

    db.SubmitChanges(); 
} 

: 당신이 뭔가를 할 수있는 코드 숨김 지금

public class FooDataContext : DataContext 
{ 
    public Table<Order> Orders; 
} 

public class Order 
{ 
     [DbColumn(Identity = true)] 
     [Column(DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)] 
     public int Id { get; set; } 

     [DbColumn(Default = "(getutcdate())")] 
     [Column(DbType = "DateTime", CanBeNull = false, IsDbGenerated = true)] 
     public DateTime DateCreated { get; set; } 

     [Column(DbType = "varchar(50)", CanBeNull = false, IsDbGenerated = false)] 
     public string Name { get; set; } 
} 

: 그래서 변경 사항을 추적하기 위해 다음을 수행해야 뒤에 있지만, Linq To SQL을 시작하는 좋은 방법입니다. 모든 데이터베이스 상호 작용을 외부 프로젝트에 넣고 GUI에서이 동작을 캡슐화하는 클래스로 호출하는 것이 좋습니다.

Linq To SQL을 처음 사용하는 경우 Linq To Sql (dbml) 파일을 만드는 것이 좋습니다.

솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 새 항목 추가를 선택하십시오. Linq To SQL 파일을 선택하면 데이터베이스에 연결하여 테이블을 선택할 수 있습니다.

그런 다음 생성 된 코드를 살펴보고 Linq To SQL의 작동 원리와 함께 수행 할 수있는 좋은 아이디어를 얻을 수 있습니다. SQL Linq에 작업하고 지금까지 당신을 데려 갈 것이다에 대한 가이드 라인 ... 첫째

+0

문제가 해결되었습니다. –

6

, 당신이 CSLA.NET처럼, 이러한 문제를 해결하는 기존의 프레임 워크를 사용할 수

사용. 이 프레임 워크의 저자는 바로이 문제를 해결했습니다. 이에 대해서는 http://www.rockfordlhotka.net/cslanet/으로 가십시오. 전체 프레임 워크를 사용하지 않더라도 개념은 계속 적용됩니다.

자신 만의 롤을 만들고 싶다면 과거에 내 컬렉션에서 List를 사용하는 대신 BindingList에서 파생 된 사용자 정의 유형을 사용했습니다. BindingList에서 상속하면 항목 추가/제거의 동작을 재정의 할 수 있습니다. 따라서 예를 들어 또 다른 내부 컬렉션 인 "delteted"항목을 가질 수 있습니다. 재정의 된 Remove 메서드가 컬렉션에서 호출 될 때마다 항목을 "삭제 된"컬렉션에 넣은 다음 Remove 메서드의 기본 구현을 호출합니다. 추가 된 항목이나 변경된 항목에 대해 동일한 작업을 수행 할 수 있습니다.

2

작업 단위가 필요하다고 생각하고 있지만, 쓰지는 마십시오. NHibernate 또는 다른 ORM을 사용하십시오. 그것이 바로 그들이 만든 것입니다. 그들은 단위 작업을 내장하고 있습니다.

비즈니스 개체는 실제로 대부분의 응용 프로그램에서 "가는 방법"입니다. 당신은 깊은 곳에서 다이빙을하고 있고 많은 학습이있을 것입니다. DDD를보십시오.

코드 숨김 코드에서도 이와 같이 강력하게 권고드립니다. MVP 패턴을 살펴보십시오.

(나는 새롭고 매우 중요한 것들을 많이 배워야했지만) 솔리드로 보았습니다.

많은 것들을 다루기 때문에 JP Boodhoo의 .net 코스 외에는 확인하고 싶을 수도 있습니다.

관련 문제