首页 新闻 会员 周边 捐助

如何在实体类中做扩展属性

0
[已解决问题] 解决于 2020-04-23 15:33

场景 :

  系统中有一张会员表 (user) , 包含三个属性 id,name,pwd , 业务跑起来了

 

  然后新需求来了, 要求在用户属性中增加性别 (grade) 和 年龄 (age) 

 

实现 : 

  最常规的做法是 我直接在数据库表中增加两个字段 (grade和age) , 然后在模型层(model)中增加字段 , 然后一切如常 . 

  如果过两个星期 , 需求要求改变为不要年龄(age)字段了, 要生日(birthday) 信息 , 此时 , 又要重复上面的做法 , 去修改代码 , 修改查询条件 , 才能返回给应用使用 . 

 

疑问 : 

  如何设计一个灵活的系统 , 可以自由的扩展的数据处理系统 . 

kaolasz的主页 kaolasz | 初学一级 | 园豆:5
提问于:2020-04-20 15:18

将可变属性,放在一个Map中。系统启动时从配置文件读取有哪些属性,同时提供一个接口来动态增加或删除属性。

。淑女范erり 4年前

@。淑女范erり: 有这方面的最佳实践可以学习一下么

kaolasz 4年前
< >
分享
最佳答案
0

目前没有满意答案 , 准备重启一个问题 , 写一下遇到的实际案例来寻求帮助

kaolasz | 初学一级 |园豆:5 | 2020-04-23 15:33
其他回答(3)
0

你的问题太大了,“如何设计一个灵活的系统 , 可以自由的扩展的数据处理系统”。这是软件工程研究的话题了。就你提出的问题而言我觉得:

  1. 需求变化是正常现象,像你说的这种需求变化,我觉得改数据库表是可行的,应该这么做。过两个星期需求变了,那就再跟着改呗
  2. 虽然需求变化是正常的,但是大框架不应该剧烈得变动,如果上了线了还有需要改表结构这种操作频繁地发生,我觉得是你们的需求分析严重没有做好
  3. 如果由于业务原因,某些实体的属性要经常增减,那我建议不要把属性和数据库列对应,而是把属性和数据库行对应:如
属性 父表Id
姓名 张三 1
生日 2020年4月20日 1

或者考虑NoSQL存储

会长 | 园豆:12461 (专家六级) | 2020-04-20 15:30

问题范围有点大 , 这个是我提问方式的问题 , 

控制客户不改需求那是不可能的 , 就只能提高自己系统的灵活度了 , 本质是想要实现一个可随意扩展字段的系统 (并且已经实现,但是效率以及扩展性不理想[无法分库分表以及执行复杂操作],普通使用还是没问题的) , 所以想用第三方例如 ef , suger 等第三方库 , 并且建立在映射关系上的这种机制

支持(0) 反对(0) kaolasz | 园豆:5 (初学一级) | 2020-04-23 10:15
0

如果你想要free scheme,可以考虑mongodb

yytxdy | 园豆:1680 (小虾三级) | 2020-04-20 16:43

现在的业务还是需要用关系型数据库的

支持(0) 反对(0) kaolasz | 园豆:5 (初学一级) | 2020-04-23 10:12
1

ef codefirst+migration
关注模型就完事了,也不用考虑这么多啊

猝不及防 | 园豆:2836 (老鸟四级) | 2020-04-21 10:12

有关于这方面的最佳实践么?  我看了下 , 貌似是自动更新模型的 ?

支持(0) 反对(0) kaolasz | 园豆:5 (初学一级) | 2020-04-23 10:03

@kaolasz: 是啊,自己更新模型,你去搜索一下这方面的文章,ef自己检查模型的更新,自己生成脚本去更新数据库,但是你得自己试试,没记错的话 ,一般建议是不用ef自动更新,要手动更新,不过手动更新的代码都通过迁移ef自己生成的

支持(0) 反对(0) 猝不及防 | 园豆:2836 (老鸟四级) | 2020-04-23 10:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册