문제

Windows 양식 컨트롤 및 LINQ로 작업 할 때 Buisiness 레이어가 데이터를 반환하는 방법에 대한 "최상의 옵션"이 있습니까?

지금 당장 DataTables를 반환하여 데이터 소스를 반환 된 DataTable로 설정할 수 있습니다. 더 나은 옵션이 있습니까? 왜요?

public class BLLMatrix
{
    public static DataTable GetMaintItems(int iCat)
    {
        IQueryable<tblCaseNotesMaintItem> tItems = DALMatrix.GetCNTable();
        return
            (tItems.Where(item => item.CategoryID == iCat & item.IsActive).OrderBy(item => item.OrderID).Select(
                item => new { item.ItemID, item.ItemDescription })).CopyLinqToDataTable();
    }

internal static class DALMatrix
{
    internal static MatrixDataContext MatrixDataContext = new MatrixDataContext();

    internal static Table<tblCaseNotesMaintItem> GetCNTable()
    {
        return MatrixDataContext.GetTable<tblCaseNotesMaintItem>();
    }

나는 이와 비슷한 질문을 발견했다 -> LINQ와 SQL 및 DTO와의 우려를 분리합니다

도움이 되었습니까?

해결책

개인적으로 데이터 전송 객체를 선호하지만 데이터 세트는 핀치로 작동합니다.

기본적으로 아이디어는 데이터 전송 객체 (논리가없고 클라이언트에서 작업하려는 모델을 나타내는 경우)를 사용하는 경우, 이는 전면 변경에 관계없이 살 수있는 추상화입니다. 또는 백엔드. 일반적으로 좋은 생각입니다.

데이터 세트는 유용하지만 숫자/문자열 기반 필드 액세스로 인해 컴파일 타임 안전 부족 (강하게 유형 된 데이터 세트의 경우가 아님)은 문제가 될 수 있습니다.

일반적으로 데이터 전송 객체와 비교하여 와이어를 통해 데이터 세트를 직렬화하는 데 많은 양의 오버 헤드가 있습니다.

다른 팁

데이터 세트의 오버 헤드 때문에 나만의 모델 클래스를 만들고 싶습니다. 객체 배열 (또는 ILIST 인터페이스를 구현하는 것)을 반환하는 경우 대부분의 ASP.NET 요소의 DataSource 속성과 동일하게 설정할 수 있습니다.

링크를 사용할 때 개인적으로 데이터 소스를 설정하고 싶습니다. List<YourObject>

자동차, ICAR 또는 목록 (CAR)과 같은 객체의 인스턴스를 반환하는 비즈니스 논리를 선호합니다. 이렇게하면 데이터와 UI 간의 명확한 분리를 유지합니다.

나는 데이터 세트 대신 DataReaders를 사용하는 것을 좋아하며 데이터 계층의 반복자 블록을 사용하여 DataReader를 IEnumerable<IDataRecord>. 거기에서 나는 비즈니스와 데이터 계층 사이에 일종의 추가 단계가 있습니다. IEnumerable<MyBusinessObject>. 데이터베이닝을 위해 프레젠테이션 계층에이를 전달할 수 있어야합니다.

데이터와 비즈니스 계층을 분리하는 데 더 나은 작업을 수행하기 때문에이 접근법이 마음에 듭니다. 비즈니스 계층은 데이터 세트 측면에서 생각해서는 안되며 데이터 계층은 비즈니스 객체를 구성하는 방법을 알 필요가 없습니다. 내가 이것을 별도의 계층으로 생각한다면 나는 두 세계를 모두 최대한 활용합니다. 데이터 또는 비즈니스 계층으로의 변경은 비즈니스 개체를 구성하는 해당 공장 코드 만 변경하면됩니다.

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