한 걸음 한 걸음 AgileEAS 사용을 가르쳐 드릴게요.NET 베이스 라이브러리 응용 개발 - 베이스 - ORM 액세서리 및 구성

시리즈 회고


이 시리즈의 앞면에는 세 편의 글이AgileEAS를 소개하고 시범을 보였다.NET 플랫폼 ORM 구성 요소의 개발 절차와 흔히 볼 수 있는 사용 방식은 앞의 세 편의 글을 통해 모두가 ORM을 정상적으로 사용하여 정상적인 개발을 할 수 있다. 본고는 ORM 구조적인 문제인 ORM 대상의 액세서리를 언급하고자 한다.

상황 설명


ORM 액세서리를 언급하면 우리는 어쩔 수 없이 대상 디자인에 직면한 문제를 제기해야 한다. 그것이 바로 도대체 대상이다.조작()인지 조작자인지.조작(대상)에 대해 논쟁성이 있고 명확한 결과가 없는 문제에 대해 본고에서 상세하게 소개할 수 없습니다. 저는 적당한 시기에 대상 디자인에서의 대상을 발표할 것입니다.조작() 또는 조작자.작업(객체).

액세스 패턴 변경


         AgileEAS.NET 플랫폼의 ORM은 최초로 대상을 기반으로 한다.조작()의 이러한 사고방식은 최초의 버전에서 ORM 실체 대상(IEntity)과 테이블 대상(Itable)에 ORM의 기본 조작인 읽기, 업데이트, 삭제, 플러그인 조작을 포함한다.
IEntity의 정의를 보면 실체 기록 인터페이스는Query,Refresh,Inert,Update,Delete 등 데이터베이스와 동기화되는 조작을 정의했고CacheRefresh와 같은 캐시 리셋 조작도 정의했다. 마찬가지로Itable 대상도 그의 조작을 정의했다.
Itable 인터페이스는 Query, Update, Delete 등 데이터베이스와 동기화하는 작업을 정의하고 CacheQuery와 같은 캐시 조회 작업도 정의했다.
최초의 ORM 실현에서 ITAble과 IEntity의 실현Table와 Entity 두 기류에서 이러한 방법을 직접 실현했다. 실질적으로 가장 높은 ORM 체계에 ITAble와 IEntity 인터페이스가 존재하지 않았고 그때는 인터페이스 기반 구동을 요구할 필요가 없었다.
지금까지 ORM 실체 대상(IEntity와 Itable)은 이 방법의 정의를 포함하고 있으며 긴 응용 개발에서prodct.Insert () 와 같은 표기법은 매우 보편적이다.
AgileEAS에서.NET 플랫폼 ORM의 변천 역사에서 두 가지 일이 ORM 대상과 그 액세서리 체계를 바꾸었다. 첫 번째는 같은 응용이 서로 다른 데이터베이스에서 실행되어야 하는 수요가 인터페이스 구동을 바탕으로 하는 데이터층 개발을 구동했다. 즉, ITAble과 IEntity 인터페이스를 제시했고 두 번째는SAAS/분포식 응용 환경이 ORM 액세서리의 탄생을 촉진하여 ORM 구성 요소의 정의와 조작의 분리를 실현했다.
ORM 액세스기의 정의인 IOrmAccessor를 살펴보겠습니다.
캐시 액세스기 ICacheAccessor:
플랫폼 디렉토리는 EAS에 있습니다.Data.dll 프로그램에는 데이터베이스 연결을 기반으로 하는 ORM 액세서리(Orm Accessor)가 내장되어 있다. 그는 실제 존재하는 데이터베이스를 바탕으로 IConnection과 Iaccessor 액세서리를 연결해야 하고 메모리 기반의 ORM 캐시 액세서리(CacheAccessor)도 내장되어 있다.
동시에 AgileEAS.NET 플랫폼에서는 Remoting 기술과 WebService 기술을 바탕으로 하는 분포식 기술의 분포식 ORM 접근기를 실현했다.
ORM 액세서리가 있으면 우리는 응용 개발 과정에서 조작자를 사용할 수 있다.ORM 작업(예: ormAccessor.Insert(product).

두 모델의 통합


          AgileEAS.NET 플랫폼의 ORM은 ORM 액세서리를 통해 조작자를 제공합니다.조종(대상)의 이런 처리 모델은 ORM이 서로 다른 시기에 이 두 가지 서로 다른 방법의 처리를 실현했다. 이 두 가지 방식에 대해 누구도 결정적인 장점을 가지고 모든 것이 상대적이며 조작의 편리성에 있어 대상을 대상으로 하는 이론 체계에 대해 말할 수 없다.
          AgileEAS.NET 플랫폼의 ORM은 실체의 정의와 접근을 분리한 다음에 ORM 대상과 접근기를 통합하고 접착시켰다. 즉, 다음과 같은 결과에 이르렀다.
          1.ORM은 솔리드를 통해 사용할 수 있습니다.() 작업은 액세서리를 통해서도 가능합니다.ORM 솔리드를 조작(솔리드)합니다.
          2.ORM 실체 대상의 조작 코드를 분리하고 ORM 실체 대상에 실체 정의와 관련된 코드를 보존하며 실체 대상에 OrmAccessor 속성을 정의하고 실현된 조작 방법은 Orm 액세서리의 실체 조작 방법을 호출한다.
          3.ORM 실체 대상과 ORM 액세서리 인터페이스는 간혹 인터페이스 구동을 바탕으로 코드나 설정을 통해 실행할 때 서로 다른 액세서리로 이루어진다.
실제 사용 중에 나는 두 단락의 등효 코드를 보냈다.
    /// 
    ///  
    /// 
    public void DemoQuery()
    {
        ProductList table = new ProductList();
        OrmContext.OrmAccessor.Query(table);
        int cols = table.Columns.Count;
        foreach (Product product in table.Rows)
        {
            //do
        }
    }       
          等同于:
    /// 
    ///  
    /// 
    public void DemoQuery()
    {
        ProductList table = new ProductList();
        table.OrmAccessor = OrmContext.OrmAccessor;
        table.Query();
        int cols = table.Columns.Count;
        foreach (Product product in table.Rows)
        {
            //do
        }
    }        

액세스 구성


이전에 ORM 프레젠테이션의 예는 ORM 액세서리 사용 보고서의 OrmContext에 대해 설명했고 OrmContext 클래스에서 Orm 액세서리에 대해 직접 new를 사용하는 방식으로 실례화했다.
    /// 
    /// Orm 。
    /// 
    public static IOrmAccessor OrmAccessor
    {
        get
        {
            if (Instance.ormAccessor == null)
            {
                Instance.ormAccessor = new OrmAccessor();
                Instance.ormAccessor.DataAccessor = DataAccessor;
            }
            return Instance.ormAccessor;
        }
    }

         从代码中我们看到Instance.ormAccessor =  new OrmAccessor(),这样一来应用业务与访问器的实现进行了耦合,Instance.ormAccessor.DataAccessor = DataAccessor; 这一句完成ORM访问器所依赖的数据访问器的注入,程序并没有有效的解耦。
        解决这个问题的办法,还是老方法,使用AgileEAS.NET平台的控制反转(IOC)组件来完成访问器的解耦,有关AgileEAS.NET平台IOC组件的介绍请参见 AgileEAS.NET平台之对象控制反转一文。
        首先我们用以下代码替换OrmContext类:
    
     
     
     
     
OrmContext
 1       static   class  OrmContext
 2      {
 3           ///  
 4           ///  Orm 。
 5           ///  
 6           public   static  IOrmAccessor OrmAccessor
 7          {
 8               get
 9              {
10                   return  ContextHelper.GetContext().Container.GetComponentInstance( " OrmAccessor " as  IOrmAccessor;
11              }
12          }
13      }
 

ClassLib에.OrmDemo 항목에 응용 프로그램 구성 파일 app를 추가합니다.config 를 입력하고 다음과 같이 씁니다.
 1 
xml version="1.0" encoding="utf-8"
?>
 2 
<
configuration
>
 3 
    
<
configSections
>
 4 
        
<
section 
name
="EAS.Objects"
 type
="EAS.Objects.ConfigHandler,EAS.IOCContainer"
/>
 5 
    
configSections
>
 6 
    
<
EAS.Objects
>
 7 
        
<
object 
name
="DataConnection"
 assembly
="EAS.Data"
 type
="EAS.Data.Access.SqlClientConnection"
 LifestyleType
="Singleton"
>
 8 
            
<
property 
name
="ConnectionString"
 type
="string"
 value
="Data Source=vm2003;Initial Catalog=eas;User ID=sa"
 
/>
 9 
        
object
>
10 
        
<
object 
name
="OrmAccessor"
 assembly
="EAS.Data"
 type
="EAS.Data.ORM.OrmAccessor"
 LifestyleType
="Singleton"
>
11 
            
<
property 
name
="DbConnection"
 type
="object"
 value
="DataConnection"
 
/>
12 
        
object
>
13 
        
15 
        
<
object 
name
="DataAccessor"
 assembly
="EAS.Data"
 type
="EAS.Data.Access.SqlClientAccessor"
 LifestyleType
="Singleton"
>
16 
            
<
property 
name
="Connection"
 type
="object"
 value
="DataConnection"
 
/>
17 
        
object
>
18 
    
EAS.Objects
>
19 
configuration
>
 
다시 컴파일하고 실행하며, 이번 시연을 끝내고, ORM에서 SQL 문장을 사용하여 ORM이 실현할 수 없는 특정한 업무를 소개할 것입니다.  
이 예와 관련된 데이터 테이블 구조는 AgileEAS를 기반으로 합니다.NET 플랫폼 베이스 라이브러리 응용 개발 - 전체 설명 및 데이터 정의 문서, DDL 스크립트 다운로드:http://files.cnblogs.com/eastjade/demo.db.doc.sql.rar, 본문 코드 다운로드: ORM.Demo4.rar. 
 
링크
한 걸음 한 걸음 AgileEAS 사용을 가르쳐 드릴게요.NET 베이스 라이브러리 응용 개발 - 시리즈 카탈로그
AgileEAS.NET 플랫폼 개발 가이드 - 시리즈 카탈로그
AgileEAS.NET 애플리케이션 개발 플랫폼 소개 - 기사 인덱스
AgileEAS.NET 플랫폼 애플리케이션 개발 자습서 - 사례 계획
AgileEAS.NET 공식 사이트
민첩 소프트웨어 공학 실험실
QQ 그룹: 116773358

좋은 웹페이지 즐겨찾기