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

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

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

针对我们原来的模块功能。因为需求的增加和变更。原来的简单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. 如何用burp抓取手机的流量_用企业微信SCRM如何搭建流量新体系
  2. Maya基础入门学习教程
  3. a卡显存检测软件_科普小课堂,A卡玩家如何轻松超频?
  4. 开课吧python视频百度云-廖雪峰老师官方人工智能教程,13个案例带你全面入门!...
  5. 【转】商业内幕(Business Insider)网站近期评出了全美20家最具创新力的科技创业公司...
  6. OpenCV伪彩色applyColorMap函数
  7. 随机排列_“按字母顺序排列”其实是种随机顺序
  8. 跨进程实现在Tree中快速定位节点
  9. 《数学之美》马尔科夫链的扩展-贝叶斯网络
  10. C语言学习笔记---时间函数strftime()
  11. BCD与ASCII码互转-C语言实现
  12. linux jdk1.7 tomcat
  13. mysql创建学生表命令_用sql语句创建学生表如何做
  14. 简单实用的易语言短信接口demo
  15. java读写Txt文件
  16. ubuntu安装l2tp/ipsec
  17. 常用的linux技巧,Linux Shell常用技巧(十二)-第二部分
  18. Saving Tang Monk II(bfs+优先队列)
  19. 2010.12.29(2)——— android GridView
  20. Joda-Time 简介

热门文章

  1. Yarn调度器和调度算法(From 尚硅谷)
  2. App Uninstaller for Mac(mac系统清理软件) v2.2特别版
  3. mysql 查找数据过程_mysql数据库查询过程探究和优化建议
  4. R语言 : 层次聚类分析
  5. Unity3D 新版粒子系统 (Shuriken)
  6. 支付系统中的对账处理
  7. Typora图片自动上传插件
  8. 算法笔记-问题 A: 重心在哪里
  9. C#练习题答案: TIY-Fijhghbujhjh【难度:1级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战
  10. LINUX These critical programs are missing or too old: bison compiler python