求助(空手套架构)来了,服务端大佬进来看看!

2019-08-14 11:53:36 +08:00
 guodastanson

坐标武汉,目前在一家小的不能再小的公司做服务端,业务就是医疗相关。数据库、Java 服务端都是我在做,另外 Java 基本就我一个人在搞,要用什么全都可以自己决定,现在项目慢慢多起来了,感觉现在的架构(我觉得就算不算架构,全是我用 spingboot+mybatis+db 做的项目)已经满足不了需求了。目前公司版本管理也算是形同虚设,另外接下来一个项目可能需要用上分布式了,我准备学习下 springcloud 然后用在项目上。 发帖是想求助下各位大佬,如何能够让自己后端的设计适应不同客户提出的定制化需求,怎样能够做产品而不是单个的项目。现在的后端设计动不动就要加业务表或者修改业务表,有没有一些设计思想能指点一下?另外版本管理方面用了 maven+git,但是也是凭借着一点在前公司使用的经验,感觉理解尚浅,请大家指点一二!

5590 次点击
所在节点    Java
41 条回复
kkjinping
2019-08-14 15:28:10 +08:00
你的问题不是技术架构其实是业务架构的设计
warcraft1236
2019-08-14 15:30:49 +08:00
用微服务是为了解耦,在复杂业务场景下才会比较有收益,不然干嘛要上微服务
kkjinping
2019-08-14 15:32:29 +08:00
具体点的步骤:
1:梳理需求,对各种需求抽取共性,把基础服务、核心服务,抽象出来,做好一定程度的扩展性,数据方面根据需求方这种字段做数据隔离。

2:非共性的业务,单独开发各自的业务服务,如果基础服务和核心服务的表不支持的部分,单独设计需求扩展表。

3:以上是业务架构。其实这种业务架构,确实比较适合做服务化,基础核心是一套服务,各自的业务服务是一套。
guodastanson
2019-08-14 16:01:56 +08:00
@kkjinping 对的,就是业务架构设计问题。在公司都找不到人讨论问题!
第二点说的挺好的,实际操作过程中,大部分数据和业务逻辑是可以通用的,比如说病房系统就是以病床信息为核心的,但是经常要扩展一堆边边角角的属性。
我原来设计的备用属性 property1,property2 到 property4 都用上了,我感觉这种不明确的设定非常蠢,虽然较为灵活。另外其实我已经在用扩展的表了,但是感觉这是个无底洞。
arthas2234
2019-08-14 16:13:15 +08:00
@guodastanson
这个需要你充分了解业务,抽出公用业务,剩下客户定制的需求通过配置或者定制化模块来解决
表设计也是:主表+扩展表,扩展表使用主表名_公司名
luozic
2019-08-14 16:30:08 +08:00
DDD +六边形架构+微服务 当然前提是业务足够复杂。
x7395759
2019-08-14 16:51:21 +08:00
br00k
2019-08-14 17:02:04 +08:00
jhipster 真香
securityCoding
2019-08-14 17:05:08 +08:00
不用考虑这么多 , 微服务的前提是有强力懂运维开发的团队,不然会搞死人
rayu
2019-08-14 19:57:07 +08:00
佩服楼主一个人搞定后端全套
saulshao
2019-08-14 21:26:22 +08:00
其实,从项目走向产品化一点也不神秘。一开始所有的软件都是从项目产生的。
所谓高度定制化的软件产品其实就是项目。
面向特定行业的软件其实都是从项目演化来的。
我认为,软件的功能其实就是一整套对于具体业务支持的代码实现,目前看来包括用户界面+业务逻辑+数据存储。
软件项目和软件产品的区别,其实在于对于不同业务的支持能力。
所以你会看到,大多数的软件产品其实会专注比较简单而重要的功能,而软件项目则会让开发者感觉自己对于功能实现没有支配权。但是最终的目标,其实都是要支持相应的业务运作。为此,行业软件现在有 2 个发展方向:
1. 实现尽可能多的功能,以使得自己的软件能满足尽可能多的用户需求,这里需要指出的是,行业软件的需求其实来之不易。
2. 只实现经过筛选的主要功能,在提供给不同的用户使用时,进行针对性的定制化开发。
思路其实就是:
1. 找出哪些功能应该是核心(其实就是很多项目都要反复使用的功能),用大量的精力管理这些功能,每次修改这些功能的时候,都异常谨慎,同时对这些功能保持完整的文档追踪。
2. 为了项目实现新功能的时候,就把新功能视为扩展,只有在发现这些新功能用到很多个项目上才考虑整合到核心功能中。
从实现技术上来看,其实今天大家在讨论的所谓先进技术,在楼主所处的行业很难用得上。倒是可以考虑引入一些可以加快开发和部署速度的方法,以降低工作量,有更多的时间来考虑产品转化。
不要怕修改数据库,与修改代码的代价比,修改数据库根本不算事。所以我一直不推荐搞所谓的预留字段,对于 Oracle 这样的公司搞的那种预留 Property1~propertyN 这样的作法,我一直嗤之以鼻,因为这并不能避免变更,纯粹增加了后期维护的难度。
Takamine
2019-08-15 12:36:28 +08:00
不知道楼主工作多久了,如果还是一个人挑大梁,建议分布式什么的,想都不要想。_(:з」∠)_
vjnjc
2019-08-15 15:52:30 +08:00
分布式是为了性能的吧,看你的描述是新需求太多太杂,解决办法不是应该招人么。。。
guodastanson
2019-08-16 10:28:07 +08:00
@vjnjc 招人我又决定不了,不过最近是打算问问一个在以前公司带的实习生,有没兴趣过来一起搞
guodastanson
2019-08-16 10:29:36 +08:00
@rayu 去年还做个安卓 app 你敢信?从没搞过安卓的被逼着用 webview 搞了个 app,实际就是 app 里套了个网址那种感觉
guodastanson
2019-08-16 10:30:54 +08:00
@x7395759 学习一波,马来人先马起来
guodastanson
2019-08-16 10:32:47 +08:00
@Takamine 好的好的,我尽量再哄个人一起帮我做 o(* ̄︶ ̄*)o
guodastanson
2019-08-16 10:33:43 +08:00
@securityCoding 听你们这么一说我肯定不会动这念头了
guodastanson
2019-08-16 10:46:29 +08:00
@x7395759 你发的这是好东西啊
x7395759
2019-08-16 10:59:46 +08:00
@guodastanson 加入收藏夹,好好弄一年,技术方面就不愁了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/591779

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX