- 浏览: 507305 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (329)
- [发布至博客园首页] (12)
- [随笔分类][01] .Net X (59)
- [随笔分类][20] Architecture (16)
- [随笔分类][21] Developer Logs (13)
- [网站分类]Windows 7 (1)
- [随笔分类][13] Oracle & .Net (7)
- [随笔分类][16] Love in China (14)
- [随笔分类][15] Development Tools (20)
- [随笔分类][18] Windows Phone (12)
- [随笔分类][12] Design & Pattern (17)
- [网站分类].NET新手区 (22)
- [网站分类]首页候选区 (2)
- [随笔分类][08] Windows (Server) (13)
- [随笔分类][02] CSLA.Net (3)
- [随笔分类][10] jQuery & javaScript (10)
- [随笔分类][11] SQL Server (4)
- [随笔分类][22] Enterprise Logs (3)
- [随笔分类][03] News (9)
- [随笔分类][19] Quality Assurance (2)
- [随笔分类][05] Silverlight (20)
- [随笔分类][14] Google Earth & .Net (6)
- [网站分类]非技术区 (9)
- [随笔分类][07] WWF (2)
- [随笔分类][04] SharePoint (1)
- [随笔分类][20] Analysis & Design (36)
- [随笔分类][06] WCF (5)
- [随笔分类][12] Architecture (1)
- [随笔分类][09] WPF (0)
- [随笔分类][17] VStudio & Expression (5)
最新评论
-
zhangyy130:
你好,我关于第二段的那个表视图、模型与图这三者的关系我没有看明 ...
UML模型的组成 -
guji528:
谢谢分享!
Enterprise Architect 基础应用 -
studentsky:
好文章,图文并茂!
WCF 第一个用 Visual Studio 2010 创建的WCF服务 -
chen975311486:
用哪个工具画的????
UML中对关系的描述 (二) -
frankies:
继续学习中。。
UML 交互概述图
CSLA.Net 3.0.5 项目管理示例 业务集合基类(ProjectResources.cs,ProjectResource.cs)
using System; using System.Data; using System.Data.SqlClient; using Csla; using Csla.Data; namespace ProjectTracker.Library { /// <summary> /// 此?类?的?主?要?功?能?用?于?给?Project提?供?对?其?关?联?子?对?象?的?集?合?的?一?个?维?护?和?映?射?,?Project----ProjectResources----ProjectResource /// 她?是?一?个?集?合?,?是?父?对?象?组?织?子?对?象?的?一?个?集?合? /// ,?提?供?用?于?托?管?包?含?的?子?类?,?比?较?,?添?加?,?删?除?子?对?象?等? /// /// </summary> [Serializable()] public class ProjectResources : BusinessListBase<ProjectResources, ProjectResource> { #region Business Methods /// <summary> /// 获?得?一?个?项?目?集?合?中?的?项?目?资?源?对?象?(?)? /// </summary> /// <param name="resourceId">项?目?资?源?ID</param> /// <returns></returns> public ProjectResource GetItem(int resourceId) { //从?当?前?对?象?集?合?中?搜?索?其?中?的?子?对?象?,?比?较?参?数?ID,?相?等?则?返?回? foreach (ProjectResource res in this) if (res.ResourceId == resourceId) return res; return null; } /// <summary> /// 通?过?指?定?的?ID值?,?像?当?前?集?合?中?加?入?子?对?象?,?分?配? /// </summary> /// <param name="resourceId">待?加?入?子?对?象?的?ID</param> public void Assign(int resourceId) { if (!Contains(resourceId)) { ProjectResource resource = ProjectResource.NewProjectResource(resourceId); this.Add(resource); } else throw new InvalidOperationException("资?源?已?经?在?项?目?中?存?在?"); } /// <summary> /// 从?集?合?中?移?除?一?个?资?源?子?对?象? /// </summary> /// <param name="resourceId">待?移?除?子?对?象?id</param> public void Remove(int resourceId) { foreach (ProjectResource res in this) { if (res.ResourceId == resourceId) { //从?集?合?类?中?移?除?,?集?合?类?是?一?个?泛?型?,?由?于?BusinessListBase集?成?自?集?合?基?类?,?所?以?他?也?同?时?拥?有?集?合?的?方?法? //Remove,Add等?,?这?个?操?作?应?该?将?数?据?放?到?DEleteList中? Remove(res); break; } } } /// <summary> /// 检?查?集?合?中?是?否?包?含?此?子?对?象?,?如?果?包?含?返?回?True,?否?则?返?回?false /// </summary> /// <param name="resourceId">子?对?象?ID,?资?源?id用?的?是?整?型?</param> /// <returns></returns> public bool Contains(int resourceId) { foreach (ProjectResource res in this) if (res.ResourceId == resourceId) return true; return false; } /// <summary> /// 在?删?除?已?删?除?的?集?合?中?搜?索?子?对?象?的?存?在? /// </summary> /// <param name="resourceId"></param> /// <returns></returns> public bool ContainsDeleted(int resourceId) { foreach (ProjectResource res in DeletedList) if (res.ResourceId == resourceId) return true; return false; } #endregion #region Factory Methods /// <summary> /// 内?联?工?厂?,?代?表?同?一?个?程?序?集?中?调?用?,?因?为?他?只?是?提?供?给?project对?象?在?创?建?的?时?候?同?时?被?创?建?的?一?个?方?法?,?调?用?请?看?project /// 而?UI不?会?去?使?用?她? /// </summary> /// <returns></returns> internal static ProjectResources NewProjectResources() { return new ProjectResources(); } /// <summary> /// 通?过?dr获?得?一?个?集?合? /// </summary> /// <param name="dr"></param> /// <returns></returns> internal static ProjectResources GetProjectResources(SafeDataReader dr) { //调?用?带?参?数?的?构?造?器? return new ProjectResources(dr); } /// <summary> /// 默?认?构?造?器? /// </summary> private ProjectResources() { //标?记?为?子?关?系? MarkAsChild(); } /// <summary> /// 带?参?数?的?构?造?器? /// </summary> /// <param name="dr"></param> private ProjectResources(SafeDataReader dr) { MarkAsChild(); Fetch(dr); } #endregion #region Data Access // c从?数?据?看?加?载?数?据? private void Fetch(SafeDataReader dr) { //将?列?表?更?改?事?件?暂?时?设?置?为?失?效?,?增?加?效?率?(?)? this.RaiseListChangedEvents = false; while (dr.Read()) this.Add(ProjectResource.GetResource(dr));//DR传?个?子?对?象?用?于?初?始?化?一?个?子?对?象? //启?用?事?件? this.RaiseListChangedEvents = true; } /// <summary> /// (?)?,?这?个?方?法?是?内?联?方?法?,?因?为?她?只?是?Project来?调?用?的? /// 托?管?让?每?一?个?子?对?象?都?做?相?应?的?操?作? /// </summary> /// <param name="project"></param> internal void Update(Project project) { this.RaiseListChangedEvents = false; // update (thus deleting) any deleted child objects //从?已?删?除?列?表?中?轮?寻?每?一?个?元?素?调?用?其?删?除?自?身?方?法?,?注?意?他?们?要?传?入?其?关?联?的?项?目?对?象? foreach (ProjectResource obj in DeletedList) obj.DeleteSelf(project);//从?数?据?库?中?删?除?(?)? // now that they are deleted, remove them from memory too //将?DeletedList从?系?统?缓?存?中?移?除?掉?所?有?的?元?素?,?deletedList被?清?空?,?同?步?数?据?库? DeletedList.Clear(); // add/update any current child objects // 再?来?看?看?添?加?和?更?新?是?如?何?实?现?的?,?同?样?要?传?入?相?应?关?联?的?项?目?对?象? // 轮?寻?每?一?个?子?元?素?,?查?看?其?标?志?,?如?果?是?新?的?就?调?用?子?对?象?的?插?入?方?法? // 如?果?不?是?新?的?,?那?么?就?调?用?更?新?方?法? foreach (ProjectResource obj in this) { //根?据?子?对?象?的?状?态?调?用?合?适?的?方?法? if (obj.IsNew) obj.Insert(project); else obj.Update(project); } this.RaiseListChangedEvents = true; } #endregion } }
using System; using System.Data; using System.Data.SqlClient; using Csla; using Csla.Data; using Csla.Validation; namespace ProjectTracker.Library { /// <summary> /// 此?类?为?分?配?资?源?类?,?用?于?和?ProjectResources类?合?作?为?Project处?理?分?配?给?项?目?的?资?源?的?类?、? /// 集?成?子?业?务?基?类?,?与?project是?相?同?的?,?但?是?她?还?集?成?自?一?个?IholdRoles接?口? /// 这?个?类?只?提?供?给?ProjectResources使?用? /// </summary> [Serializable()] public class ProjectResource : BusinessBase<ProjectResource>, IHoldRoles { #region Business Methods private int _resourceId;//资?源?id private string _firstName = string.Empty;//名?字? private string _lastName = string.Empty;//姓?氏? private SmartDate _assigned;//分?配?日?期? private int _role;//职?位? private byte[] _timestamp = new byte[8];//时?间?戳?,?用?于?处?理?并?发?修?改?的?情?况?,?先?写?者?赢?的?乐?观?并?发? //表?明?特?性?,?表?示?是?主?键?,?但?是?并?不?一?定?是?唯?一?的?可?识?别?值? [System.ComponentModel.DataObjectField(false, true)] public int ResourceId { [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] get { CanReadProperty(true); return _resourceId; } } public string FirstName { [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] get { CanReadProperty(true); return _firstName; } } public string LastName { [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] get { CanReadProperty(true); return _lastName; } } /// <summary> /// 全?名?属?性? /// </summary> public string FullName { [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] get { if (CanReadProperty("FirstName") && CanReadProperty("LastName")) return string.Format("{0}, {1}", LastName, FirstName); else throw new System.Security.SecurityException( "没?有?读?取?权?限?"); } } /// <summary> /// 分?配?日?期? /// </summary> public string Assigned { [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] get { CanReadProperty(true); //获?取?时?间?的?文?本? return _assigned.Text; } } public int Role { [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] get { CanReadProperty(true); return _role; } [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] set { CanWriteProperty(true); //如?果?不?重?复?则?更?改? if (!_role.Equals(value)) { _role = value; //1调?用?对?数?据?验?证?规?则?的?检?查?AddBusinessRules,2,IsDirty标?记?已?经?修?改?, //3,出?发?属?性?更?改?事?件?提?供?给?UI刷?新?的?警?示?(411),?发?生?变?化?就?要?调?用?此?方?法? PropertyHasChanged(); } } } //获?得?资?源? public Resource GetResource() { return Resource.GetResource(_resourceId); } //提?供?Id,?是?为?了?支?持?Object的?,?Equals().toString(),GetHashCode() protected override object GetIdValue() { return _resourceId; } #endregion #region Validation Rules protected override void AddBusinessRules() { //通?过?RuleHandler委?托?,?调?用?Assignment.ValidRole方?法?,?对?Role进?行?验?证?,?这?个?方?法?在?Assignment中?定?义?,?你?可?以?看?一?下?,?是?公?用?的?方?法? //如?果?返?回?false的?话?就?是?代?表?验?证?失?败?,?true验?证?成?功? ValidationRules.AddRule( new Csla.Validation.RuleHandler( Assignment.ValidRole), "Role"); } #endregion #region Authorization Rules protected override void AddAuthorizationRules() { //只?有?ProjectManager,?才?有?权?限?修?改?Role AuthorizationRules.AllowWrite( "Role", "ProjectManager"); } #endregion #region Factory Methods internal static ProjectResource NewProjectResource(int resourceId) { //调?用?构?造?器?初?始?化?,?,?获?得?一?个?资?源?,?,?给?予?一?个?默?认?职?位? return new ProjectResource( Resource.GetResource(resourceId), RoleList.DefaultRole()); } internal static ProjectResource GetResource(SafeDataReader dr) { //调?用?构?造?器?初?始?化? return new ProjectResource(dr); } //默?认?构?造? private ProjectResource() { //标?记?为?子?很?重?要?,?必?须?的? MarkAsChild(); } /// <summary> /// 通?过?一?个?已?有?资?源?,?和?一?个?职?位?来?构?造?一?个?ProjectResource /// </summary> /// <param name="resource"></param> /// <param name="role"></param> private ProjectResource(Resource resource, int role) { MarkAsChild(); _resourceId = resource.Id; _lastName = resource.LastName; _firstName = resource.FirstName; _assigned.Date = Assignment.GetDefaultAssignedDate(); _role = role; } /// <summary> /// 单?参?数?构?造?,?这?个?时?候?DR是?一?个?记?录? /// </summary> /// <param name="dr"></param> private ProjectResource(SafeDataReader dr) { MarkAsChild(); Fetch(dr); } #endregion #region Data Access private void Fetch(SafeDataReader dr) { _resourceId = dr.GetInt32("ResourceId"); _lastName = dr.GetString("LastName"); _firstName = dr.GetString("FirstName"); _assigned = dr.GetSmartDate("Assigned"); _role = dr.GetInt32("Role"); //非?常?标?准?的?时?间?戳? dr.GetBytes("LastChanged", 0, _timestamp, 0, 8); //做?旧?,?因?为?此?对?象?与?数?据?库?是?数?据?同?步?的? MarkOld(); } /// <summary> /// 内?联?的?,?当?其?父?对?象?调?用?此?对?象?时?候?判?断?对?象?状?态?,?isDeleted=false isnew=true,?调?用?此?方?法? /// </summary> /// <param name="project"></param> internal void Insert(Project project) { // if we're not dirty then don't update the database //如?果?当?前?对?象?不?脏?也?就?是?没?有?给?其?付?过?值?,?没?有?必?要?更?新?到?数?据?库? if (!this.IsDirty) return; using (SqlConnection cn = new SqlConnection(Database.PTrackerConnection)) { cn.Open(); //调?用?分?派?类?中?的?方?法?,?并?且?返?回?时?间?戳? //参?数?是?连?接?,?项?目?id父?id,?资?源?id子?id,?分?配?时?间?,?角?色? _timestamp = Assignment.AddAssignment(cn, project.Id, _resourceId, _assigned, _role); //做?旧?This对?象?,?因?为?她?已?经?与?数?据?库?同?步?,?也?就?是?说?她?已?经?在?数?据?库?中?了?,?不?是?新?的?数?据?库? //这?个?方?法?如?果?是?在?根?对?象?数?据?门?户?会?自?动?调?用?,?但?是?子?对?象?需?要?手?动? //这?个?方?法?会?将?isNew标?记?,?和?IsDirty标?记?设?置?为?False,?因?为?这?时?,?这?个?数?据?既?不?是?新?的?也?不?是?脏?的? MarkOld(); } } internal void Update(Project project) { // if we're not dirty then don't update the database if (!this.IsDirty) return; using (SqlConnection cn = new SqlConnection(Database.PTrackerConnection)) { cn.Open(); //与?Insert同?理? _timestamp = Assignment.UpdateAssignment(cn, project.Id, _resourceId, _assigned, _role, _timestamp); MarkOld(); } } internal void DeleteSelf(Project project) { // if we're not dirty then don't update the database if (!this.IsDirty) return; // if we're new then don't update the database if (this.IsNew) return; using (SqlConnection cn = new SqlConnection(Database.PTrackerConnection)) { cn.Open(); Assignment.RemoveAssignment(cn, project.Id, _resourceId); MarkNew(); } } #endregion } }
//此?业?务?类?实?现?与?.0完?全?一?致? using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; using Csla; using Csla.Validation; using Csla.Data; using System.Reflection; namespace ProjectTracker.Library { //定?义?这?个?接?口?是?为?了?使?子?类?提?供?,?可?以?提?供?对?Role属?性?的?访?问? internal interface IHoldRoles { int Role { get; set; } } /// <summary> /// 这?个?类?定?义?为?内?联?的?,?同?时?是?静?态?的?,?是?因?为?这?个?类?是?提?供?了?ProjectResource和?ResourceAssignmet的?通?用?方?法?的?集?合?,?因?为? /// 这?个?两?个?对?象?都?在?操?作?这?相?同?的?数?据?,?一?个?资?源?属?于?某?个?项?目?,?和?一?个?项?目?拥?有?多?少?资?源?在?是?一?个?含?义? /// 静?态?类?,?是?因?为?这?个?类?没?有?任?何?私?有?变?量?,?也?就?是?数?据?域?,?所?以?声?明?为?静?态?方?便?使?用? /// 此?对?象?对?Assignment表?进?行?操?作?,?这?个?表?是?一?个?中?间?表?,?用?来?存?储?多?对?多?的?表?数?据?映?射? /// 通?用?原?则? /// </summary> internal static class Assignment { #region Business Methods /// <summary> /// 获?得?默?认?的?分?配?时?间? /// </summary> /// <returns></returns> public static DateTime GetDefaultAssignedDate() { return DateTime.Today; } #endregion #region Validation Rules /// <summary> /// Ensure the Role property value exists /// in RoleList /// 像?上?面?的?英?文?解?释?一?样?,?这?个?验?证?确?保?了?Role在?RoleList中?可?以?被?找?到? /// 这?个?方?法?是?一?个?公?用?的?验?证?方?法?ProjectResource和?ResourceAssignmet通?过?委?托?来?调?用?这?个?方?法?验?证? /// </summary> public static bool ValidRole(object target, RuleArgs e) { int role = ((IHoldRoles)target).Role; //通?过?RoleList的?GetList获?得?List对?象?,?RolesList对?象?拥?有?的?ContainsKey方?法?可?以?判?断?此?id在?列?表?中?是?否?存?在? if (RoleList.GetList().ContainsKey(role)) return true; else { e.Description = "职?务?必?须?在?职?务?列?表?中?存?在?"; return false; } } #endregion #region Data Access /// <summary> /// 添?加?一?个?分?配? /// </summary> /// <param name="cn">连?接?</param> /// <param name="projectId">项?目?id</param> /// <param name="resourceId">资?源?id</param> /// <param name="assigned">分?配?时?间?</param> /// <param name="role">职?位?</param> /// <returns></returns> public static byte[] AddAssignment(SqlConnection cn, Guid projectId, int resourceId, SmartDate assigned, int role) { using (SqlCommand cm = cn.CreateCommand()) { cm.CommandText = "addAssignment"; return DoAddUpdate(cm, projectId, resourceId, assigned, role); } } /// <summary> /// 更?新?一?个?分?配? /// </summary> /// <param name="cn">连?接?</param> /// <param name="projectId">项?目?id</param> /// <param name="resourceId">资?源?id</param> /// <param name="assigned">分?配?时?间?</param> /// <param name="newRole">更?新?后?的?职?位?</param> /// <param name="timestamp">时?间?戳?</param> /// <returns></returns> public static byte[] UpdateAssignment(SqlConnection cn, Guid projectId, int resourceId, SmartDate assigned, int newRole, byte[] timestamp) { using (SqlCommand cm = cn.CreateCommand()) { cm.CommandText = "updateAssignment"; cm.Parameters.AddWithValue("@lastChanged", timestamp); return DoAddUpdate( cm, projectId, resourceId, assigned, newRole); } } /// <summary> /// 添?加?和?更?新?的?公?共?方?法? /// </summary> /// <param name="cm"></param> /// <param name="projectId"></param> /// <param name="resourceId"></param> /// <param name="assigned"></param> /// <param name="newRole"></param> /// <returns></returns> private static byte[] DoAddUpdate(SqlCommand cm, Guid projectId, int resourceId, SmartDate assigned, int newRole) { cm.CommandType = CommandType.StoredProcedure; cm.Parameters.AddWithValue("@projectId", projectId); cm.Parameters.AddWithValue("@resourceId", resourceId); cm.Parameters.AddWithValue("@assigned", assigned.DBValue); cm.Parameters.AddWithValue("@role", newRole); //时?间?戳?返?回?值? SqlParameter param = new SqlParameter("@newLastChanged", SqlDbType.Timestamp); param.Direction = ParameterDirection.Output; cm.Parameters.Add(param); cm.ExecuteNonQuery(); return (byte[])cm.Parameters["@newLastChanged"].Value; } /// <summary> /// 删?除?一?个?分?配? /// </summary> /// <param name="cn"></param> /// <param name="projectId"></param> /// <param name="resourceId"></param> public static void RemoveAssignment(SqlConnection cn, Guid projectId, int resourceId) { using (SqlCommand cm = cn.CreateCommand()) { cm.CommandType = CommandType.StoredProcedure; cm.CommandText = "deleteAssignment"; cm.Parameters.AddWithValue("@projectId", projectId); cm.Parameters.AddWithValue("@resourceId", resourceId); cm.ExecuteNonQuery(); } } #endregion } }
发表评论
-
[转] 面向对象设计原则
2009-08-02 14:23 658一、单一职责原则(S ... -
iBATIS.NET
2009-09-03 17:49 1443下载主页: http://ibatis.apache.org ... -
Castle
2009-09-06 16:23 725下载地址:http://www.castleproject.o ... -
CSLA.Net 3.0.5 版本 教学程序,代码附教学注释
2009-09-13 10:01 1326离开原来的公司后,就 ... -
Enterprise Library 4.1 Caching Block 图文笔记
2009-10-03 23:06 1525一,下载并安装好Enterprise Library ... -
Enterprise Library 4.1 Logging Block 快速使用图文笔记
2009-10-04 12:06 1648一,下载并安装好Enterprise Library ... -
Enterprise Library 4.1 Data Access Block 快速使用图文笔记
2009-10-04 17:30 1315一,下载并安装好Enterprise Library 4. ... -
Enterprise Library 4.1 Cryptography Block 快速使用图文笔记
2009-10-04 20:10 756哈希算法------ http://baike.baidu.c ... -
Enterprise Library 4.1 Security Block 快速使用图文笔记
2009-10-05 08:33 938.Net 2.0 开始,从前Security Block 一部 ... -
Enterprise Library 4.1 Application Settings 快速使用图文笔记
2009-10-05 08:41 911Application Settings 可以使我们运用企业库 ... -
Unity Application Block 1.2 图文学习笔记
2009-10-05 09:05 747此内容将会在数星期后学习 -
Enterprise Library 4.1 Policy Injection Block 快速使用图文笔记
2009-10-05 09:09 761示例源码下载:EL41Sample.rarEnterprise ... -
Enterprise Library 4.1 Instrumentation 快速使用图文笔记
2009-10-05 09:17 771示例源码下载:EL41Sample.rarEnterprise ... -
CSLA.Net 3.0.5 项目管理示例 业务基类 Project.cs
2009-10-06 09:39 1192using System; using System.Coll ... -
CSLA.Net 3.0.5 项目管理示例 名值列表基类、只读基类、业务负责人基类
2009-10-06 10:01 750using System; using System.Da ... -
CSLA.Net 3.0.5 项目管理示例 UI ProjectEdit.aspx
2009-10-06 10:23 912<%@ Page Language="C#&q ...
相关推荐
5. **事务处理**:CSLA.NET支持事务管理,可以轻松地在业务逻辑中包裹多个数据库操作,确保数据操作的原子性。 6. **单元测试**:框架设计考虑了测试驱动开发,使得编写和运行单元测试变得简单,从而提高软件质量。...
CSLA.NET是一个强大的.NET开发框架,由Rockford Lhotka创建,主要用于构建可复用的、业务逻辑层的对象。这个框架的核心目标是提供一个统一的方式来创建业务对象,这些对象不仅能在客户端应用程序中使用,也能在...
1. **框架目标**:Csla.Net的主要目标是简化业务层的开发,通过提供一系列预定义的基类和工具,帮助开发者快速构建符合企业级标准的业务对象。 2. **设计原则**:遵循SOLID原则,包括单一职责原则、开闭原则、里氏...
5. **安全性与权限管理**:CSLA.NET提供了内置的安全性和权限管理机制,可以控制用户对业务对象的访问权限。这部分内容会涵盖如何设置和实施这些安全策略。 6. **单元测试与持续集成**:作为企业级应用,单元测试和...
CSLA.NET 4.0 源码是一个用于构建企业级业务对象的框架,它源自Chuck Noble所著的《Expert C# Business Objects》一书。这个框架的核心目标是提供一个可扩展、易于维护的解决方案,帮助开发人员创建复杂的业务逻辑层...
CSLA (Component Services Library for Applications) .NET框架是由Rockford Lhotka创建的,它为.NET平台提供了一种强大的业务对象开发模型。该框架的主要目标是帮助开发人员构建可复用、可维护和灵活的业务应用程序...
3. **事务管理**:CSLA.NET提供了事务支持,可以轻松地在业务对象级别或整个业务流程级别管理数据库事务,确保数据一致性。 4. **安全性**:框架内置了权限和角色管理,可以限制用户对业务对象的操作,如只读、修改...
[CSLA.NET] Using CSLA 4 eBook Series ☆ 图书概要:☆ The Using CSLA 4 ebook series will teach you how to use CSLA 4 to create powerful object-oriented business layers for your applications, as well ...
CSLA .NET的核心是它的业务对象模型,该模型允许开发者定义强类型、可验证且具有状态管理能力的对象。通过使用 CSLA,开发者可以将业务逻辑与数据访问层分离,从而提高代码的可重用性和可测试性。例如,你可以创建可...
CSLA.NET 框架成为了微软.NET 平台上最广泛应用的开发框架之一,本书介绍了CSLA.NET 3.6 架构背后的构思过程,描述了怎样搭建支持这个架构的框架,如何创建应用程序的业务对象,并且展示了如何使用这个框架创建基于...
《#企业应用开发艺术CSLA.NET框架开发实战》(Expert C#2008 Business Objects)配套源码及例程csla-4.5.700。 CSLA .NET is a software development framework that helps you build a reusable, maintainable ...
[Apress] CSLA .NET 框架企业应用开发艺术 (2008 版本) (英文版) [Apress] Expert C# 2008 Business Objects (E-Book) ☆ 图书概要:☆ In Rockford Lhotka’s Expert C# 2008 Business Objects, you’ll learn ...
Csla的核心理念是提供一套可复用的、基于组件的业务对象模型,这些对象可以在客户端和服务器端之间无缝地工作,支持数据验证、安全性、状态管理等功能。框架的灵活性使得开发人员能够专注于业务逻辑,而不是重复的...
C#企业应用开发艺术CSLA.NET框架开发实战.part1.rar(PDF加源码)
5. **更完善的文档和示例**:随着版本的更新,CSLA.NET的文档通常会得到更新,提供更详尽的教程和示例,帮助开发者快速上手。 **压缩包内容分析** "README.txt" 文件很可能是包含了安装指南、更新内容和注意事项的...
8. **项目Tracker cs**:在压缩包中的"ProjectTracker cs"可能是一个使用CSLA .NET 框架开发的示例项目,它演示了如何将CSLA的特性应用于实际的项目管理应用中,包括任务跟踪、资源分配等功能。 综上所述,CSLA ...
Visual Studio CSLA Extension for ADO.NET Entity Framework. Visual Studio extension and T4 templates for generation of CSLA objects from ADO.NET Entity Framework model. CSLA.NET框架面向实体框架的代码...
### 使用CSLA 4:CSLA .NET概览 #### 一、CSLA .NET简介 **CSLA(Component-based Scalable Logical Architecture)**是一种面向对象的应用程序开发框架,主要针对.NET平台。它由Rockford Lhotka创建,并在多个...
2. **数据访问**:Csla.NET 提供了多种数据访问策略,包括ADO.NET、Entity Framework、NHibernate等,可以根据项目需求选择合适的方式。 3. **验证(Validation)**:Csla.NET 提供了一套完整的验证规则框架,允许...
CSLA.NET是一个在分布式环境下只通过修改配置文件就可以实现N层部署的框架. 它致力于构建丰富,强大而灵活的业务层,包含了验证,权限,数据门户等标准化的解决方案,使你的业务对象更加标准和灵活.它提出了移动对象...