综合应用WPF/WCF/WF/LINQ之三十一:代码生成器之ContractToBLL

简介:
 一个不算很复杂的BLL层的方法的代码如下。
  我们需要考虑的如下几种情形(以下统计并不完全):
  1、对某些不能重复的字段进行判断,以检查其是否重复。
  2、如果某条记录被其它表引用,则会抛出异常。
  3、如果每次操作多条记录,或者多个表,则需要使用事务。
  4、删除记录时,可能需要将详细记录表的相关记录一并删除。
  5、添加记录时,可能需要将详细记录表的相关记录一并添加。
  6、没有专用于更新某个字段的方法,所以需要先读取整个记录,再更改相应字段,再更新整条记录。
  7、一些情况下,某些方法需要返回一些特别的值。
  8、一些情况下,某些方法缺失。如某些情况下,只有Insert方法,没有Update方法。
  除此之外,由于业务的特殊性,还可能有众多的其它情形需要考虑。因此,在必要的情况下,我们有必要做一些配置,以便于代码的自动生成。当然,先自动生成部分代码,再手工完成其它代码也是一个不错的想法,只是需要注意,防止以后自动生成时覆盖掉以前的手工代码(使用TFS进行代码管理,能有效避免这个失误)。
    1      public  void SaveFunction( FunctionInfo functionInfo)
    2     {
    3          Database database =  Factory.CreateDatabase();
    4          FunctionDAL dal =  new  FunctionDAL(database);
    5 
    6          try
    7         {
    8              string faultType =  "Record duplicated exception.";
    9              string faultReasonForFunctionName =  "Function Name is duplicated.";
   10 
   11              IList listByFunctionName = dal.GetFunctionsByFunctionName(functionInfo.FunctionName);
   12 
   13              if (dal.GetFunctionByFunctionId(functionInfo.FunctionId) ==  null)
   14             {
   15                  if (listByFunctionName !=  null)
   16                 {
   17                      throw  new  FaultException< FaultInfo>( new  FaultInfo(faultType, faultReasonForFunctionName),  new FaultReason(faultReasonForFunctionName));
   18                 }
   19 
   20                 functionInfo.FunctionId = ( new  TableDAL(database)).GetTableValueByTableId( TableIdEnum.Function);
   21 
   22                 dal.InsertFunction(functionInfo);
   23             }
   24              else
   25             {
   26                  if ((listByFunctionName ==  null || (listByFunctionName.Count == 1 && (( FunctionInfo)listByFunctionName[0]).FunctionId == functionInfo.FunctionId)) ==  false)
   27                 {
   28                      throw  new  FaultException< FaultInfo>( new  FaultInfo(faultType, faultReasonForFunctionName),  new FaultReason(faultReasonForFunctionName));
   29                 }
   30 
   31                 dal.UpdateFunctionByFunctionId(functionInfo);
   32             }
   33         }
   34          catch
   35         {
   36              throw;
   37         }
   38          finally
   39         {
   40             database.Connection.Close();
   41         }
   42     }
  由于笔者命名等的规范性,很多规则可以避免需要配置即可生成代码。这里,笔者仅仅配置了需要检查重复的字段。
    1  <? xml   version =" 1.0"   encoding =" utf-8"  ?>
    2  < root >
    3      < table   name =" Department"   referenced =" Department is referenced." >
    4          < item   name =" DepartmentName"   duplicated =" Department Name is duplicated."  />
    5      </ table >
    6  </ root >
  具体的自动生成代码的过程,这里就不列出来了,也不值得列出来,使用了非常多的条件判断,由此这个过程的复杂性可见一斑。请读者自行查看代码。
  BLLToService、ServiceToHost等代码生成器就显得非常简单,笔者就不一一介绍了。




本文转自 Eallies 51CTO博客,原文链接:http://blog.51cto.com/eallies/79007,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
开发框架 前端开发 JavaScript
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(12) -- 使用代码生成工具Database2Sharp生成WPF界面代码
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(12) -- 使用代码生成工具Database2Sharp生成WPF界面代码
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(12) -- 使用代码生成工具Database2Sharp生成WPF界面代码
|
开发者 开发工具 定位技术
|
6月前
|
C# 开发者 Windows
基于Material Design风格开源、易用、强大的WPF UI控件库
基于Material Design风格开源、易用、强大的WPF UI控件库
376 0
|
6月前
|
C#
浅谈WPF之装饰器实现控件锚点
使用过visio的都知道,在绘制流程图时,当选择或鼠标移动到控件时,都会在控件的四周出现锚点,以便于修改大小,移动位置,或连接线等,那此功能是如何实现的呢?在WPF开发中,想要在控件四周实现锚点,可以通过装饰器来实现,今天通过一个简单的小例子,简述如何在WPF开发中,应用装饰器,仅供学习分享使用,如有不足之处,还请指正。
135 1
|
3月前
|
开发框架 缓存 前端开发
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
|
3月前
|
C# 开发者 Windows
一款基于Fluent设计风格、现代化的WPF UI控件库
一款基于Fluent设计风格、现代化的WPF UI控件库
|
3月前
|
C# 前端开发 UED
WPF数据验证实战:内置控件与自定义规则,带你玩转前端数据验证,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,数据验证是确保输入正确性的关键环节。前端验证能及时发现错误,提升用户体验和程序可靠性。本文对比了几种常用的WPF数据验证方法,并通过示例展示了如何使用内置验证控件(如`TextBox`)及自定义验证规则实现有效验证。内置控件结合`Validation`类可快速实现简单验证;自定义规则则提供了更灵活的复杂逻辑支持。希望本文能帮助开发者更好地进行WPF数据验证。
103 0