C# SQLite数据库三层架构 动态生成数据库

三岁儿 2020-10-21 05:03:24
C# SQLite数据库三层架构 动态生成数据库
...全文
2859 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
在我们开发 ORM 的年代,或者类似微软刚开始开发 EF 的年代,都知道,只要给一个对象声明 Attribute 就能自动进行 DAL 操作。例如泛型
CreateTable<销售明细>();
就能产生或者更新升级数据库表,操作
var result = (from x in context.Table<销售明细>()
where x.商品编码=="123456" and x.时间戳>20101009
select new{ x.商品编码, x.单价, x.金额}).ToList();
就能查询出来结果。

也就是说,DAL层(数据操作层)框架是现成的通用的,从 ADO.NET、SQLHelper 到各种性能尚可的 ORM 技术,都是 DAL。至于说要程序员去很 low 地去对每一个关系数据库表的“增删改查”写个什么 DAL 方法,这种是 struct 引入的垃圾做法,没有什么效益只不过在当年 java 跟微软系列工具竞争时洗了不少蛊惑人心的书籍而已。
  • 打赏
  • 举报
回复
其实有些的东西没有多少技术含量,“以测试为准”,以经验效率为先。以前强调的一些理念,如果你没有核心技术去真正实践,那么就应该放弃。如果你需要封装一个 api 方法,例如“读取集团一小时的所有POS点数据”这样一个功能,那是因为它非常重要,需要 BLL 封装。至于说你把每一个数据表的“增删改查”最 low 的语句单独封装为一个 api 方法,即使是说你们没有做过一个系统有几百个数据表的那种稍微大一点的系统,这种所谓的“为了名义上的三层而胡乱组织三层架构”的做法的也是整天纠结在底层浪费了大量时间大量经费,没有对“BLL、通讯、前端现场快速开发应用”等等真正需要技术的地方下功夫。
  • 打赏
  • 举报
回复
引用 3 楼 三岁儿 的回复:
[quote=引用 1 楼 正怒月神的回复:]

就是用三层把方法都已经封装好了,但是要生成数据库表,对接数据库[/quote]

三层架构是个设计理念,而不要搞成具体的“八股文式架构”。DAL 适宜设计为一个“通用的”框架,也就是说是独立的,可以是先有 DAL,现有 SQLHelper,后有 BLL。在各个 BLL 方法中调用 DAL,而不是说 BLL 作为 DAL 的父类。如果本末颠倒会出现什么后果?实际上就会自以为“把方法都封装好了”,结果遥遥无期,随着千变万化的系统功能需求进化,你们会把大量精力扯到纠缠DAL上,就好像整天研究“鸡窝怎样搭建、回字有多少种写法”,原本2天能干完的额活儿非要用1整年的时间去纠结。

生成数据库表就是使用简单的 sql 语句调用关系数据库的 DDL 语句就行了。BLL 层代码调用 DAL 层代码,而DAL用于各种 BLL 中可以被调用的通用框架,而不是什么本末倒置地“封装”一堆从 BLL 概念继承出来的所谓的 DAL。
三岁儿 2020-10-22
  • 打赏
  • 举报
回复
引用 8 楼 医手的回复:
正常来说是先有数据库表,然后自动生成c#三层代码。 而不是先有C#三层代码,再生成数据库表
helper.cs bll dal 里面的方法都有,只需要添加字段名称即可
三岁儿 2020-10-22
  • 打赏
  • 举报
回复
helper.cs bll dal 里面的方法都有,只需要添加字段名称即可
医手 2020-10-22
  • 打赏
  • 举报
回复
正常来说是先有数据库表,然后自动生成c#三层代码。 而不是先有C#三层代码,再生成数据库表
三岁儿 2020-10-22
  • 打赏
  • 举报
回复
引用 6 楼 Bridge_go的回复:
要实现orm?
对,和ef有点类似,可以动态修改属性和数据内容,求指导
三岁儿 2020-10-22
  • 打赏
  • 举报
回复
引用 19 楼 icoolno1 的回复:
[quote=引用 16 楼 三岁儿 的回复:][quote=引用 14 楼 icoolno1的回复:]写几个函数调用数据库的ddl即可。

这个我知道呀,就是不会嘛,所以才想问[/quote]

无非就是alter/create/drop table add/drop/alter column等等定义语句,具体写法查下相应的Sql手册,程序里执行Command.ExecuteNonQuery[/quote]
是的,但是方法封装的不一样,只需要传表名字段名
八爻老骥 2020-10-22
  • 打赏
  • 举报
回复
引用 16 楼 三岁儿 的回复:
[quote=引用 14 楼 icoolno1的回复:]写几个函数调用数据库的ddl即可。

这个我知道呀,就是不会嘛,所以才想问[/quote]

无非就是alter/create/drop table add/drop/alter column等等定义语句,具体写法查下相应的Sql手册,程序里执行Command.ExecuteNonQuery
三岁儿 2020-10-22
  • 打赏
  • 举报
回复
引用 17 楼 快乐起航2020的回复:
DAL 和bll都创建一个项目吧还有UI
都有的,在dal中的参数为表名
快乐起航2020 2020-10-22
  • 打赏
  • 举报
回复
DAL 和bll都创建一个项目吧还有UI
三岁儿 2020-10-22
  • 打赏
  • 举报
回复
引用 14 楼 icoolno1的回复:
写几个函数调用数据库的ddl即可。
这个我知道呀,就是不会嘛,所以才想问
三岁儿 2020-10-22
  • 打赏
  • 举报
回复
引用 11 楼 程哈哈,的回复:
啊哈??你知道啊?求指导
八爻老骥 2020-10-22
  • 打赏
  • 举报
回复
写几个函数调用数据库的ddl即可。
三岁儿 2020-10-22
  • 打赏
  • 举报
回复
引用 11 楼 程哈哈,的回复:
请问你知道吗,求指导??
三岁儿 2020-10-22
  • 打赏
  • 举报
回复
请问你知道吗,求指导!!
  • 打赏
  • 举报
回复
Bridge_go 2020-10-21
  • 打赏
  • 举报
回复
要实现orm?
三岁儿 2020-10-21
  • 打赏
  • 举报
回复
引用 1 楼 正怒月神的回复:
用sqlite做一个模拟测试
三岁儿 2020-10-21
  • 打赏
  • 举报
回复
引用 2 楼 ∽油条á的回复:
厉害咯 ……
是没讲清楚吗
加载更多回复(3)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧