关于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死。。。

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


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

暂时就写到这。




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值