关于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 在保持强大功能的同时,还在简单性和灵活性方面拥有巨 ...
最新文章
- bzoj1196 [HNOI2006]公路修建问题
- android中获取某段程序的执行时间
- android 原始编译过程,Android编译系统环境初始化过程分析.doc
- How is navigation target url request handled by backend
- php字符串以符号截取,PHP按符号截取字符串的指定部分的实现方法
- 怎样开图纸便宜_干货技能 | 十大技巧,吃透建筑施工图纸!
- 计算机的组成 —— 鼠标
- python mysql扩展_关于python:构建’_mysql’扩展错误:无法找到vcvarsall.bat
- alphac测试和bata测试区别_康一康!接口测试与性能测试的区别瞧过来~
- idea2021.3.2版本下载及安装教程
- GeoGebra Classic 6 6.0.644 中文版 数学绘图计算工具
- 概率图模型-原理与技术 第二章 基础知识 学习笔记
- matlab等高线线型设置命令,MATLAB等高线命令
- UPC 2020年夏混合个人训练第五十场【DEG】
- Python数据处理实例
- tplink478虚拟服务器设置,tp-link路由器TL-R473如何设置,10台电脑设置局域网
- 【Cocos2D-x 3.5实战】坦克大战(1)环境配置
- 2022-04-24_数组的定义和初始化
- c语言 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 待分析过程
- Linux Sheel中cd dir后直接显示dir下的所有文件
热门文章
- 合肥工业大学计算机保研,合肥工业大学2021届保研分析,全校保研率12. 6%,而“它”48.8%...
- java url类_Java中的URL类和示例 - Break易站
- mysql对账单_支付系统设计:对账处理
- ArcGIS实验一 地形梯度效果生成
- 利用av和dlib来实现人脸识别
- Java刷漆问题代码,@不负代码不负漆
- 一篇互联网思维的健康日历是如何炼成的?
- 天津计算机考研901,2017年天津大学计算机科学与技术学院901数据结构与程序设计考研题库...
- vscode c++ 无法打开xxx 无法读取文件xxx
- Python爬虫基础教程(一)