Csla 프레임워크의 명령 대상 이해

7260 단어 프레임
오늘 저녁에 얼마 전에 만든 소형 작업 흐름 응용 프로그램을 정리했는데 그 핵심 기능 블록은 Csla 프레임워크의 시험 개발이고 오늘은 Csla 프레임워크의 명령 대상에 대해 개인적인 이해를 하겠습니다.
모두가 알다시피 업무 흐름의 개발 과정에서 절차 정의 과정, 절차 운행 과정과 작업 임무의 추적으로 나눌 수 있다. 특히 절차 실례가 운행하는 과정에서 주요한 실현은 절차 실례 창설, 임무 제출, 임무 반환, 처리, 베끼기 등으로 요약할 수 있다. 그 중에서 각 기능은 일정한 상대적인 독립성을 가지고 대부분 작업은 명령 제출 후 한꺼번에 처리한다.이러한 생각을 바탕으로 자신이 실현하는 과정에서 상술한 기능에 대해 Csla 프레임워크의 명령 대상을 사용하여 실현한다.
Csla 프레임워크의 다른 대상과 달리 기본 코드 블록은 모든 대상 유형 중 가장 간단하며 코드에는 정적 공장 방법과 명령의 실행 코드만 DataPortalExeceut () 는 다른 대상 내부에 존재할 수 있으며 내부 클래스로 외부 클래스에 호출될 수도 있고 공개 유형이 다른 모든 코드에 사용될 수도 있으며 명령 대상의 초기화는 클라이언트에 있기 때문에 클라이언트가 명령 대상과 내부 구성원에 대해 초기화할 수도 있고 서버에 전달되기 전에 클라이언트가 데이터의 유효성을 검증할 수도 있다. 그 중에서 서버에서 실행하는 방법은 DataPortal 뿐이다Execeut().이것은 단지 하나의 데이터 개수의 통계를 간단하게 진행할 수도 있고, 다른 N개 클래스를 호출해서 이번 명령 조작을 실현할 수도 있으며, 조작의 결과를 필드에 반영하여 클라이언트가 수신할 수 있도록 할 수도 있다.다음은 단순화된 명령 객체입니다.
   1:      /// <summary>
   2:      ///  
   3:      /// </summary>
   4:      [Serializable]
   5:      public class ShareNode : Csla.CommandBase
   6:      {
   7:          // ID
   8:          private int _NodeID;
   9:   
  10:          // 
  11:          private List<string> _ShareUser;
  12:   
  13:          private ShareNode(int nodeID, List<string> shareUser)
  14:          {
  15:              this._NodeID = nodeID;
  16:              this._ShareUser = shareUser;
  17:          }
  18:   
  19:          public static void Execute(int nodeID, List<string> shareUser)
  20:          {
  21:              ShareNode com = new ShareNode(nodeID, shareUser);
  22:              com = DataPortal.Execute<ShareNode>(com);
  23:          }
  24:   
  25:          protected override void DataPortal_Execute()
  26:          {
  27:              if (_NodeID == null || _NodeID <= 0 || _ShareUser == null || _ShareUser.Count <= 0)
  28:              {
  29:                  return;
  30:              }
  31:              foreach (var item in _ShareUser)
  32:              {
  33:                  ShareNode data = ShareNode.NewShareNode();
  34:                  data.ID = _NodeID;
  35:                  data.Date = DateTime.Now.ToString();
  36:                  data.ShareUser = item;
  37:                  data.ReadDate = DateTime.MaxValue.ToString();
  38:                  data.State = false;
  39:                  data.Type = ShareType.Node.ToString();
  40:   
  41:                  data.Save();
  42:              }
  43:          }
  44:      }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
위에서 말한 것은 자신이 이전에 실현한 간단한 프로세스 베끼기 기능이다. 그 중에서 베끼는 명령 대상인 ShareNode는 클라이언트가 공장 방법을 호출하여 실례화하고 개인 구조 방법을 호출하여 필드를 초기화한다(실례화하기 전에 전달된 파라미터를 검증할 수 있어 서버 측에 도착한 후에 초기화 데이터가 잘못되었다는 것을 피할 수 있다).실례적인 Execute 방법을 호출합니다. 실례적인 대상의 이동은 서버에서 (물론 로컬로 설정될 수도 있습니다) DataPortalExecute 방법은 내부에서 자신이 실현해야 할 기능을 실현한다.여기서는 간단한 데이터 조작일 뿐입니다. 복잡하면 명령 대상은 더욱 복잡한 대상 형식으로 되돌아갈 수 있습니다. 클라이언트든 서버든 더 복잡한 업무 코드가 존재할 수 있습니다.
간단하게 보면 원격 코드에 접근하는 입구일 뿐이다. 마치 wcf 중의 한 방법을 호출하는 것과 같다. 그러나 그의 이름인'명령 대상'에서 알 수 있듯이 작가는 명령이라는 것도 대상으로 보았다. 마치 자신이 업무 흐름을 실현하는 과정에서 모든 명령이 명령 대상으로 존재할 수 있는 것처럼 첫 번째 느낌은 뚜렷하다.명령 대상에서 어떻게 복잡한 코드가 이루어졌든주의해야 할 것은 명령의 집행 과정이 여러 번 데이터베이스를 조작하면 대상의 방법을 사무 속성으로 표시하여 만일을 대비해야 한다는 것이다.
프레임의 모든 유형의 대상은 사용 조건이 있습니다. 예를 들어 명령 대상과 같이 명령 처리 작업에서 유연성을 발휘할 수 있습니다.
물론 이런 용법은 이 틀을 사용하는 각도에서 생각하기 때문에 그 외에 실현할 수 있는 방법이 많고 서로 다른 상황이 한 틀에 적합하지 않을 수도 있다.아니면 그 문장을 쓰는 것은 사용 과정에서 더 많은 지식을 배우기 위해서이다.
마지막으로 주의해야 할 것은 프레임워크에서 모든 업무 대상, 조건 대상(Criteria)을 포함하여 서열화로 표시해야 한다는 것이다!그건 평상시 사용에서도 표시해야 할 것 같은데..

좋은 웹페이지 즐겨찾기