CSLA.Net学习(1)——第一个小程序

CSLA是什么东西啊!项目需要,需要学习一下!

目前应用CSLA主要是为了验证数据,数据库开发的需要,要把程序结构分分层:数据实体Models、通用数据库操作Helper、数据操作DAL、业务逻辑BIL、系统界面UI;

应用CSLA开发的第一个测试程序,Csla版本为4.3.10.0,好像和3.X版本的区别还是蛮大的:

运行结果:

 

首先需要CSLA的类库:Csla.dll,Csla.Windows.dll。

包括Drill类,DrillList类和窗体类From1。

Drill类:

Drill类
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.ComponentModel;
  6 using System.Linq;
  7 using Csla;
  8 using Csla.Data;
  9 using Csla.Security;
 10 namespace Models
 11 {
 12     [Serializable]
 13     public class Drill :BusinessBase<Drill>
 14     {
 15           #region  Business Methods
 16 
 17         private   string aa;
 18         private static PropertyInfo<int> HoleIDProperty =
 19           RegisterProperty<int>(p => p.HoleID, "钻孔编号");
 20         public int HoleID
 21         {
 22             get { return GetProperty(HoleIDProperty); }
 23             set { SetProperty(HoleIDProperty, value); }
 24         }
 25 
 26         private static PropertyInfo<int> LayerIDProperty =
 27         RegisterProperty<int>(p => p.LayerID, "分层编号");
 28         public int LayerID
 29         {
 30             get { return GetProperty(LayerIDProperty); }
 31             set { SetProperty(LayerIDProperty, value); }
 32         }
 33 
 34 
 35         private static PropertyInfo<double> TopHeightProperty =
 36         RegisterProperty<double>(p => p.TopHeight, "顶板高度");
 37         public double TopHeight
 38         {
 39             get { return GetProperty(TopHeightProperty); }
 40             set { SetProperty(TopHeightProperty, value); }
 41         }
 42 
 43 
 44         public override string ToString()
 45         {
 46             return HoleID.ToString();
 47         }
 48 
 49         #endregion
 50 
 51         #region  Business Rules
 52 
 53         protected override void AddBusinessRules()
 54         {
 55             base.AddBusinessRules();
 56 
 57             BusinessRules.AddRule(new Csla.Rules.CommonRules.MinValue<int>(HoleIDProperty, 1));
 58             //BusinessRules.AddRule(new Csla.Rules.CommonRules.MinValue<int>(LayerIDProperty, 0));
 59             BusinessRules.AddRule(new Csla.Rules.CommonRules.MinValue<double>(TopHeightProperty, 0));
 60             BusinessRules.AddRule(new Csla.Rules.CommonRules.RegExMatch(LayerIDProperty, "^[0-9]*[1-9][0-9]*$", "要求类型为整形"));
 61         }
 62 
 63         #endregion
 64 
 65         #region  Factory Methods
 66 
 67         public static Drill NewOrder()
 68         {
 69             return DataPortal.Create<Drill>();
 70             //return new Drill();
 71         }
 72 
 73         public static Drill GetOrder(int id)
 74         {
 75             return DataPortal.Fetch<Drill>(id);
 76         }
 77 
 78         public static void DeleteOrder(int id)
 79         {
 80             DataPortal.Delete<Drill>(id);
 81         }
 82 
 83         public Drill()
 84         {
 85             MarkAsChild();
 86         }
 87         public Drill(int holeid ,int layerid):this()
 88         {
 89             using (BypassPropertyChecks)
 90             {
 91                 this.HoleID = holeid;
 92                 this.LayerID = layerid;
 93             }
 94         }
 95         #endregion
 96         protected override void AcceptChangesComplete()
 97         {
 98             System.Diagnostics.Debug.WriteLine(string.Format("Acc: {0} ({1}, {2})", HoleID, CurrentEditLevel, CurrentEditLevelAdded));
 99             base.AcceptChangesComplete();
100         }
101 
102         protected override void UndoChangesComplete()
103         {
104             System.Diagnostics.Debug.WriteLine(string.Format("Und: {0} ({1}, {2})", HoleID, CurrentEditLevel, CurrentEditLevelAdded));
105             base.UndoChangesComplete();
106         }
107 
108         protected override void CopyStateComplete()
109         {
110             System.Diagnostics.Debug.WriteLine(string.Format("Beg: {0} ({1}, {2})", HoleID, CurrentEditLevel, CurrentEditLevelAdded));
111             base.CopyStateComplete();
112         }
113         #region  Data Access
114 
115         public int CurrentEditLevel
116         {
117             get
118             {
119                 return EditLevel;
120             }
121         }
122 
123         public int CurrentEditLevelAdded
124         {
125             get
126             {
127                 Csla.Core.IEditableBusinessObject ebo = (Csla.Core.IEditableBusinessObject)this;
128                 return ebo.EditLevelAdded;
129             }
130         }
131         #endregion
132     }
133 }

DrillList类:

DrillList类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Csla;
namespace Models
{
    class DrillList :BusinessBindingListBase<DrillList, Drill>
    {
    }
}

Form1窗体:

From1窗体
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Models;
namespace MineGeologyV10._1._0
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            DrillList list = new DrillList();
            list.Add(new Drill(1, 1));
            list.Add(new Drill(2, 2));
            list.Add(new Drill(3, 3));
            list.Add(new Drill(4, 4));
            list.BeginEdit();
            this.bindingSource1.DataSource = list;
            this.bindingSource1.ListChanged += new ListChangedEventHandler(bindingSource1_ListChanged);
            this.dataGridView1.DataSource = bindingSource1;
        }

        void bindingSource1_ListChanged(object sender, ListChangedEventArgs e)
        {
            System.Diagnostics.Debug.WriteLine(
        string.Format("{0}: {1}, {2}", e.ListChangedType.ToString(), e.NewIndex, e.OldIndex));
        }

        private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {

        }
    }
}

这里发现一个问题:Csla实现数据datagridview中的验证,如果是数据类型错误,DataGridView会弹出错误对话框,这时单元格没有失去焦点,也就是说此时的验证是在UI层的,没有发生在BIL层,没有通过Csla来实现验证。而只有失去焦点,数据存入DrillList类对象时才进行业务逻辑的验证。所有我将DataGridView的Data_Error事件处理了一下,这样就不会弹出对话框了,只是让光标无法离开单元格。
原来我的单元格验证都是在DataGridView中进行的!这样的坏处是没有办法与界面分离。但是数据绑定的机制确实很复杂!!

接下来要和数据库结合起来开发!

转载于:https://www.cnblogs.com/yhlx125/archive/2012/05/08/2480972.html

CSLA .NET是一个.NET软件开发框架,帮助开发者“为Windows、Web、面向服务和工作流等应用构建强大和可维护的业务逻辑层”。 CSLA是Component-based, Scalable, Logical Architecture的简写,CSLA . NET是Rockford Lhotka基于.Net设计的一套N-tier分布式框架。 框架软件许可协议: 你可以将本软件用于任何非商业目的,包括与之派生出的工作。你也可以将本软件用于任何商业目的,但是你不能将本软件全部或部分地用于创建一个商业的框架产品。...... 协议非常像BSD,不禁止商业使用。但是不能直接拿这个框架去卖钱。 .NET应用架构开发经典,揭示CSAL.NET框架的设计权衡,从实践中精通面向对象技术。   CSLANET是目前,NET平台上最广泛使用的开发框架之一。使用这一框架,开发人员不必过于关心底层细节,而可以集中精力考虑业务逻辑和应用设计。《C#企业应用开发艺术:CSLA.NET框架开发实战》展现了设计和创建CSLANET框架的整个思考过程。   围绕这一框架,作者讲述了怎样用面向对象的思想来搭建,NET应用程序的架构。设计和开发,NET应用,重点介绍如何创建专注于业务的对象,使其适应于各种分布式环境;如何使用它们来搭建基于WPF、Web窗体、WCF、Windows窗体、WF的应用程序。书中还以一个包含多个接口的实例应用,教会读者怎样用好这一框架。无论你在开发中是否采用这一框架。都能从《C#企业应用开发艺术:CSLA.NET框架开发实战》受益匪浅。
CSLA.NET是一个在分布式环境下只通过修改配置文件就可以实现N层部署的框架. 它致力于构建丰富,强大而灵活的业务层,包含了验证,权限,数据门户等标准化的解决方案,使你的业务对象更加标准和灵活.它提出了移动对象(Mobile Object) 的概念,使业务对象在不同的服务器上物理性的移动.但它并不失灵活性,其数据门户对ADO.NET,LINQ, ADO.NET Entity Framework,Nhibernate等都能够支持.CSLA.NET还支持在业务对象上构建WPF、ASP.NET(Web Forms、AJAX和 MVC)和Windows Forms,WCF service,Windows Workflow,web Services,Silverlight等用户接口.      CSLA.NET开始于2001年,已经有8年时间了.现在已经被使 用在很多项目中.最新发布的3.6版本包括CSLA.NET  for Windows和CSLA.NET for Silverlight两个版本.其中CSLA.NET for Silverlight对Silverlight2.0提供了无缝支持.      CSLA.NET提供核心功能:         完全支持数据绑定(WPF,Silverlight,Windows Form和Web Form)      对象状态追踪(对象是否为新增、修改、标记为删除,等等。)    标准化业务和验证规则处理 在对象和属性层级的标准化授权 整合及简化,标准的.NET身份验证模型  撤销(Undo)功能,用来支持实作取消按钮,和复杂分层的用户接口(UI)     标准化集成与数据存取层或ORM 加强对于业务对象的LINQ查询支持 许多的一般生产力(productivity)功能,可用于很多的企业应用程序方案中 异步数据存取,和异步验证规则   支持的平台有:Microsoft .NET 1.x through 4.5.1Windows Runtime (WinRT for Windows 8.1)Windows Runtime (WinRT for Windows Phone 8.1)Windows Phone 8 (Silverlight)Silverlight 5Android (using the Xamarin tools)iOS (using the Xamarin tools)Linux and OSX (using mono) 标签:.net开发框架
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值