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学习(1)——第一个小程序相关推荐

  1. 从0到一开发微信小程序(2)——开发第一个小程序

    文章目录 其他相关文章 1.创建项目 2.小程序代码目录介绍 2.1.描述整体的app.* 2.2.描述各自页面的pages下面的目录 其他相关文章 从0到一开发微信小程序(1)--申请账号并安装开发 ...

  2. 【微信小程序控制硬件 第13篇】安信可B站直播学习总结,微信小程序MQTT远程控制ESP8266 NodeMCU,谈谈微信生态那些事;

    [微信小程序控制硬件第1篇 ] 全网首发,借助 emq 消息服务器带你如何搭建微信小程序的mqtt服务器,轻松控制智能硬件! [微信小程序控制硬件第2篇 ] 开始微信小程序之旅,导入小程序Mqtt客户 ...

  3. 零基础学浙大翁恺C语言(1):Dev C++的安装与第一个小程序

    零基础学C语言(1):Dev C++的安装与第一个小程序 在线C语言开发环境:https://clin.icourse163.org/ 本地安装Dev C++:https://sourceforge. ...

  4. 微信小程序开发(一):环境搭建和第一个小程序创建

    0 概览: 简介:微信小程序是微信里面的app,16年推出 竞品: 支付宝小程序 ,钉钉,美团,头条,抖音qq小程序 优点:1,在微信里面自由分享,2,不用下载app, 3,能快速的开发,使用微信的a ...

  5. 微信小程序开发——第一个小程序

    这几个月都在忙着准备考研都不怎么研究代码了,前几天老师安排要做毕业设计的开题报告,所以就稍微兼顾着学习了点微信小程序的开发.昨天看了一会官方给的开发文档就是实例少了点,不过有个demo可以抠代码.等考 ...

  6. 学习如何使用微信小程序的for和foreach循环遍历获得索引和数据

    学习如何使用微信小程序的for和foreach循环遍历获得索引和数据 js文件中定义数组 第一种for循环方法 第二种for循环方法length 第三种forEach循环方法 js文件中定义数组 * ...

  7. c语言如何输入汉字_C语言入门的第一个小程序

    大部分程序员入门的第一个小程序都是Hello World,还记得当时大一的时候,我室友还特意为了这个发了个说说,现在想起来好有意思,哈哈好了废话不多说,直接干. (PS:如果学过自动忽略) #incl ...

  8. 不用代码,10分钟打造属于自己的第一款小程序

    扫码体验 早晨到公司的时候,手机上推送的小程序审核通过的消息,激动的下载了小程序的二维码,扫一扫即可在手机上打开上线的小程序,不枉费昨天晚上熬夜到凌晨,用免费平台测试的功夫 gh_098cec5701 ...

  9. 微信小程序零基础入门_第一章 小程序和开发者工具的介绍

    第一章 小程序和开发者工具的基本介绍 1.1 小程序的开发工具 微信小程序的开发者需要先通过微信公众平台注册开发者账号.在微信公众平台网页中的账号分类->小程序中有着较为详细的注册介绍,可以较为 ...

  10. 【小程序】第一个小程序——创建小程序项目

    目录 小程序简介 第一个小程序 安装开发者工具 创建小程序项目 小程序简介 1. 小程序与普通网页开发的区别 2. 体验小程序 可使用手机微信(6.7.2 及以上版本)扫码下方小程序码,体验小程序: ...

最新文章

  1. 支付接口教程,详解支付宝接口(二)
  2. MDT 2013 从入门到精通之SQL Computer Unattended Files
  3. 详解Python模块化编程-自定义函数
  4. 湖北大学 计算机考研,湖北大学考研难吗?一般要什么水平才可以进入?
  5. ‘entityManagerFactory‘ that could not be found
  6. System Center 2012各组件介绍
  7. vue图片滚动抽奖_Vue项目开发-仿蘑菇街电商APP
  8. 替换Ecshop系统中产品描述部分的图片的alt图片描述
  9. 使用 webSocket 连接菜鸟打印(并获取当前电脑连接的打印机信息)
  10. echarts地图设置label引导线
  11. 玲珑3D与几何画板的比较
  12. 如何在腾讯云搭建自己的网站
  13. Excel常用技巧(三)——函数
  14. 模拟电子技术(学习笔记 1)
  15. react的useMemo 和 vue3的computed
  16. 戴尔要求DEC雇员扔掉Mac
  17. VSSDK 系列 - 创建 灯泡提示 ,替换 单词
  18. 联想网上审批系统方案
  19. ITIL 4Foundation题目-6
  20. 了解TypeScript装饰器

热门文章

  1. 百度地图android wear,Android SDK | 百度地图API SDK
  2. video php上下切换,TP3.2实现上下篇切换
  3. 中间画一条短竖线_许愿孔明灯怎么画,简约好看的孔明灯简笔画教程
  4. mysql automatic_sp_privileges_mysql variable automatic_sp_privileges 疑问
  5. Starry Night [USACO]
  6. 微信小程序学习笔记(4)--------框架之逻辑层
  7. 启动vm虚拟机里的系统时,提示此主机支持 AMD-V,但 AMD-V 处于禁用状态。
  8. 【转载】SQL执行计划
  9. 安卓开发之Handler、HandlerThread学习篇
  10. 错误:由于系统启用了内核调试器,因此不可能进行调试解决方案