关于FACADE框架使用总结。
以下全部都是本人使用感觉:如有错误,等等请留言。咱共同进步
特点:易于维护,层次分明。重用性高。
不足:不灵活。好麻烦。报错不完整。(对于刚上手的我来说)
针对我们原来的模块功能。因为需求的增加和变更。原来的简单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框架使用总结。相关推荐
- Java Web Application 自架构 四 Log4j2日志管理
上一篇里,笔者将DAO做了一个通用的实现,不过在继续之前,我们好像忘了些什么.就是做任何程序都不可缺少的东东,一个对程序的功能没什么用,很容被遗忘,但是每个方法里都需要有的东西,那就是日志. 笔者以往 ...
- 【UML 建模】UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战
发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...
- Facade模式框架源码
目录 1.Facade模式概念 2.优缺点 3.类图 4.开源框架引例 4.1 common-beanutils 4.2 druid 参考文档:外观模式 1.Facade模式概念 外观模式(Facad ...
- tp框架中的facade
门面( Facade) 门面为容器中的类提供了一个静态调用接口,相比于传统的静态方法调用, 带来了更好的可测试性和扩展性,你可以为任何的非静态类库定义一个 facade 类. /thinkphp/li ...
- tomcat中request对象是被创建的_常用开源框架中设计模式使用分析(全)
一.前言 说起来设计模式,大家应该都耳熟能详,设计模式代表了软件设计的最佳实践,是经过不断总结提炼出来的代码设计经验的分类总结,这些模式或者可以简化代码,或者可以是代码逻辑开起来清晰,或者对功能扩展很 ...
- Java 日志框架适配/冲突解决方案(值得收藏)
欢迎关注方志朋的博客,回复"666"获面试宝典 来源:juejin.cn/post/6945220055399399455 前言 你是否遇到过配置了日志,但打印不出来的情况? 你是 ...
- 可能是全网最全,JAVA日志框架适配/冲突解决方案,可以早点下班了
点击关注公众号,Java干货及时送达 你是否遇到过配置了日志,但打印不出来的情况? 你是否遇到过配置了logback,启动时却提示log4j错误的情况?像下面这样: log4j:WARN No app ...
- MyBatis 如何兼容所有日志框架?
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:blog.csdn.net/zwx900102/ar ...
- Shiro 权限框架使用总结
我们首先了解下什么是shiro ,Shiro 是 JAVA 世界中新近出现的权限框架,较之 JAAS 和 Spring Security,Shiro 在保持强大功能的同时,还在简单性和灵活性方面拥有巨 ...
最新文章
- 如何用burp抓取手机的流量_用企业微信SCRM如何搭建流量新体系
- Maya基础入门学习教程
- a卡显存检测软件_科普小课堂,A卡玩家如何轻松超频?
- 开课吧python视频百度云-廖雪峰老师官方人工智能教程,13个案例带你全面入门!...
- 【转】商业内幕(Business Insider)网站近期评出了全美20家最具创新力的科技创业公司...
- OpenCV伪彩色applyColorMap函数
- 随机排列_“按字母顺序排列”其实是种随机顺序
- 跨进程实现在Tree中快速定位节点
- 《数学之美》马尔科夫链的扩展-贝叶斯网络
- C语言学习笔记---时间函数strftime()
- BCD与ASCII码互转-C语言实现
- linux jdk1.7 tomcat
- mysql创建学生表命令_用sql语句创建学生表如何做
- 简单实用的易语言短信接口demo
- java读写Txt文件
- ubuntu安装l2tp/ipsec
- 常用的linux技巧,Linux Shell常用技巧(十二)-第二部分
- Saving Tang Monk II(bfs+优先队列)
- 2010.12.29(2)——— android GridView
- Joda-Time 简介
热门文章
- Yarn调度器和调度算法(From 尚硅谷)
- App Uninstaller for Mac(mac系统清理软件) v2.2特别版
- mysql 查找数据过程_mysql数据库查询过程探究和优化建议
- R语言 : 层次聚类分析
- Unity3D 新版粒子系统 (Shuriken)
- 支付系统中的对账处理
- Typora图片自动上传插件
- 算法笔记-问题 A: 重心在哪里
- C#练习题答案: TIY-Fijhghbujhjh【难度:1级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战
- LINUX These critical programs are missing or too old: bison compiler python