以下全部都是本人使用感觉:如有错误,等等请留言。咱共同进步

特点:易于维护,层次分明。重用性高。

不足:不灵活。好麻烦。报错不完整。(对于刚上手的我来说)

针对我们原来的模块功能。因为需求的增加和变更。原来的简单3层越来越臃肿。庞大。特使用此框架重写。

整个框架包括4大部分:

1.业务 Business

  • 数据访问层 DataAccess(数据库操作。调用框架自带方法。及配置连接字符串等)
  • 基础层(?)BusinessRule(我一直没用到。。只是调用上层的方法)
  • 业务逻辑层 BusinessFacade(业务处理。比如不同的实体转换等)
  • 服务层Service(供页面直接调用的)
  • 本来还有一层接口层的。应用于不同需要重写方法。好像被阉割了。

2.资源 Resource

  • 第三方类库等 DLL文件夹
  • 其他如图片等

3.显示 UI

  • 网站
  • 网站自定义空间
  • web service
  • 接口其他?

4.工具 Common

  • 自己写的工具类库

为什么我说感觉不灵活呢。

因为对于数据库的操作由原来的自己写SQL语句变为了使用框架自带的方法。(一部分没用用到。看方法传参等感觉还是可以实现自己写SQL的。以待以后挖掘。)

对于复杂的语句就不好操作了。不过却规范化了代码。不会出现一个sql语句一整个页面。或者几个页面。很复杂。

以下为自带的对数据库操作的接口。

public class BaseBLL<T> where T : new(){public BaseDal baseDal;public BaseBLL(string _TableName, string _OrderByField, string _PrimaryKey);public DBResult AddRecord(EntityObject entity);public void AttachAddRecord(EntityObject objects);public void AttachDeleteRecord(EntityObject objects);public void AttachUpdateRecord(EntityObject objects);public EntityConnection BuildConnection(Assembly _Assembly, string ip, string uid, string upwd, string db);public DBResult DeleteRecord(EntityObject entity);public DBResult DeleteRecord(EntityObject objects, List<string> Include);public DBResult<EntityObject> GetCurObject(EntityObject obj);public DBResult<EntityObject> GetObject(List<string> Include, List<WhereParameter> parameters);public DBResult<List<EntityObject>> QueryListRecordGroup(List<WhereParameter> ListWhere);public DBResult<List<EntityObject>> QueryListRecordGroup(List<WhereParameter> ListWhere, List<string> Include);public DBResult<List<EntityObject>> QueryListRecordGroup(List<WhereParameter> ListWhere, int CurrentPage, int PageCount, ref int RowCount);public DBResult<List<EntityObject>> QueryListRecordGroup(List<WhereParameter> ListWhere, List<string> Include, int CurrentPage, int PageCount, ref int RowCount);public DBResult<List<EntityObject>> QueryListRecordGroup(List<WhereParameter> ListWhere, List<string> Include, List<OrderParameter> ListOrder, int CurrentPage, int PageCount, ref int RowCount);public DBResult<List<DbDataRecord>> QueryListRecordGroupExtend(string strSql, List<ObjectParameter> parameters, List<OrderParameter> orderParameters);public DBResult<List<DbDataRecord>> QueryListRecordGroupExtend(string strSql, List<ObjectParameter> parameters, List<OrderParameter> orderParameters, int StartIndex, int PageCount, ref int RowCount);public EntityObject QuerySingleRecord(Guid ID);public EntityObject QuerySingleRecord(int ID);public EntityObject QuerySingleRecord(string ID);public DBResult SaveChanges();public DBResult UpdateRecord(EntityObject entity);}

对于数据库的实体则是采用ADO.NET实体模型。

以上为简单介绍。

下面是关于使用中遇到的问题及解决办法。(很多很2- -...)

首先是查询一张表所有数据空异常。

其次还是查询一张表所有数据空异常。

只有还是查询一张表所有数据空异常。

我晕死。他只会包这一个错么?这就是开头我说的报错不完整了。不知道是不是我的姿势错误的原因。

首先是检查主键。我们一般使用临时表的放置被抽取或者要处理的数据,被实体化的表发现没有主键。会发现以上问题。

其次是组合主键。当使用视图为数据源时。可能是创建视图的语句问题。会有多个组合主键。可能会冲突。需要手动去EDMX文件的从元数据里自己去改反射的特性。

 /// <summary>/// 没有元数据文档可用。/// </summary>[EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)][DataMemberAttribute()]public global::System.Int32 FlagIdentity{get{return _FlagIdentity;}set{if (_FlagIdentity != value){OnFlagIdentityChanging(value);ReportPropertyChanging("FlagIdentity");_FlagIdentity = StructuralObject.SetValidValue(value);ReportPropertyChanged("FlagIdentity");OnFlagIdentityChanged();}}}

EntityKeyProperty为主键属性。这个害惨我了。。

之后就是数据重复问题。也是因为主键问题。

数据库没有设主键但是。对实体类手动修改了。

导致查找出来的数据一堆一堆的的重复问题。

最后给数据库增加了一个自增列。

问题2:

各实体之类设置外键。失败。

很多因为是临时表我们可以控制。

问题是。数据源等等是已经用了很多年并且设计好的数据库了。要使用外键等功能并不现实。不能容错。且数据源历史数据可能本身就存在出入不可避免。外键等使用失败。

问题3:

当不在自己写SQL时使用框架。where 条件全使用

List<WhereParameter> ListWhere

参数配置。一开始也被坑的好惨。

因为他的每个参数都必须严格符合数据库的类型。否则就报。。。。空异常!!没看错。又是空异常。让我找BUG变成找BUG死。。。

程序直接生成时并不告诉我有什么错误。

还有碰到的问题...零零碎碎也想不起来了。

暂时就写到这。

关于FACADE框架使用总结。相关推荐

  1. Java Web Application 自架构 四 Log4j2日志管理

    上一篇里,笔者将DAO做了一个通用的实现,不过在继续之前,我们好像忘了些什么.就是做任何程序都不可缺少的东东,一个对程序的功能没什么用,很容被遗忘,但是每个方法里都需要有的东西,那就是日志. 笔者以往 ...

  2. 【UML 建模】UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战

    发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...

  3. Facade模式框架源码

    目录 1.Facade模式概念 2.优缺点 3.类图 4.开源框架引例 4.1 common-beanutils 4.2 druid 参考文档:外观模式 1.Facade模式概念 外观模式(Facad ...

  4. tp框架中的facade

    门面( Facade) 门面为容器中的类提供了一个静态调用接口,相比于传统的静态方法调用, 带来了更好的可测试性和扩展性,你可以为任何的非静态类库定义一个 facade 类. /thinkphp/li ...

  5. tomcat中request对象是被创建的_常用开源框架中设计模式使用分析(全)

    一.前言 说起来设计模式,大家应该都耳熟能详,设计模式代表了软件设计的最佳实践,是经过不断总结提炼出来的代码设计经验的分类总结,这些模式或者可以简化代码,或者可以是代码逻辑开起来清晰,或者对功能扩展很 ...

  6. Java 日志框架适配/冲突解决方案(值得收藏)

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:juejin.cn/post/6945220055399399455 前言 你是否遇到过配置了日志,但打印不出来的情况? 你是 ...

  7. 可能是全网最全,JAVA日志框架适配/冲突解决方案,可以早点下班了

    点击关注公众号,Java干货及时送达 你是否遇到过配置了日志,但打印不出来的情况? 你是否遇到过配置了logback,启动时却提示log4j错误的情况?像下面这样: log4j:WARN No app ...

  8. MyBatis 如何兼容所有日志框架?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:blog.csdn.net/zwx900102/ar ...

  9. Shiro 权限框架使用总结

    我们首先了解下什么是shiro ,Shiro 是 JAVA 世界中新近出现的权限框架,较之 JAAS 和 Spring Security,Shiro 在保持强大功能的同时,还在简单性和灵活性方面拥有巨 ...

最新文章

  1. bzoj1196 [HNOI2006]公路修建问题
  2. android中获取某段程序的执行时间
  3. android 原始编译过程,Android编译系统环境初始化过程分析.doc
  4. How is navigation target url request handled by backend
  5. php字符串以符号截取,PHP按符号截取字符串的指定部分的实现方法
  6. 怎样开图纸便宜_干货技能 | 十大技巧,吃透建筑施工图纸!
  7. 计算机的组成 —— 鼠标
  8. python mysql扩展_关于python:构建’_mysql’扩展错误:无法找到vcvarsall.bat
  9. alphac测试和bata测试区别_康一康!接口测试与性能测试的区别瞧过来~
  10. idea2021.3.2版本下载及安装教程
  11. GeoGebra Classic 6 6.0.644 中文版 数学绘图计算工具
  12. 概率图模型-原理与技术 第二章 基础知识 学习笔记
  13. matlab等高线线型设置命令,MATLAB等高线命令
  14. UPC 2020年夏混合个人训练第五十场【DEG】
  15. Python数据处理实例
  16. tplink478虚拟服务器设置,tp-link路由器TL-R473如何设置,10台电脑设置局域网
  17. 【Cocos2D-x 3.5实战】坦克大战(1)环境配置
  18. 2022-04-24_数组的定义和初始化
  19. c语言 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 待分析过程
  20. Linux Sheel中cd dir后直接显示dir下的所有文件

热门文章

  1. 合肥工业大学计算机保研,合肥工业大学2021届保研分析,全校保研率12. 6%,而“它”48.8%...
  2. java url类_Java中的URL类和示例 - Break易站
  3. mysql对账单_支付系统设计:对账处理
  4. ArcGIS实验一 地形梯度效果生成
  5. 利用av和dlib来实现人脸识别
  6. Java刷漆问题代码,@不负代码不负漆
  7. 一篇互联网思维的健康日历是如何炼成的?
  8. 天津计算机考研901,2017年天津大学计算机科学与技术学院901数据结构与程序设计考研题库...
  9. vscode c++ 无法打开xxx 无法读取文件xxx
  10. Python爬虫基础教程(一)