作者ripple0129 (perry tsai)
看板Soft_Job
标题Re: [讨论] 软体定义架构
时间Sun May 28 17:37:19 2017
聊一下可能的具体实现作法比较好想像
我要设计一个Web有会员登入的留言板功能
会员登入
MVC介面定义档
MemeberLogin:
-View: login(userinfo)
Controller:login(userinfo)
Model : login(userinfo)
留言板
MVC介面定义档
MessageBoard:
-View: newMessage(message)
Controller: newMessage(message)
Model: newMessage(message)
-View: editMessage(message)
Controller: editMessage(message)
Model: editMessage(message)
专案介面定义档
MonolithProject:
-MemberLogin: MVCDefineFile
MessageBoard: MVCDefineFile
专案介面定义档1
MicroServiceMemberLogin:
MemberLogin: MVCDefineFile
专案介面定义档2
MicroServiceMessageBoard:
MessageBoard: MVCDefineFile
藉由不同的定义档
也可以实现MVC转化其他架构
藉由不同的专案定义档来实现专案的架构
所有的function再各自去实作即可
这应该是我猜想的软体定义架构吧
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 223.136.41.39
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1495964241.A.F6D.html
1F:→ pttworld: php的cms不就一堆外挂。05/28 18:20
架构跟外挂不太一样啊
我所想的软体定义架构是
可以依据需求任意改变架构
也就是说当你想把Model部分独立出来
还可以做到类似
MicroServiceLoginModel:
LoginModel: ModelDefineFile
也就是横向切分的处理
上面的范例是属於纵向切分
※ 编辑: ripple0129 (223.136.41.39), 05/28/2017 18:24:41
2F:→ pttworld: 你的改变是指编译期还是执行期。05/28 18:59
编译啊,动态时期改变似乎意义不大。用软体定义架构是为了更有弹性的修改。当然如果
有什麽需求是需要在runtime做改变,自然也可以去实现。
※ 编辑: ripple0129 (223.136.41.39), 05/28/2017 19:05:17
3F:推 CoNsTaR: 看不出来你想要表达什麽05/28 19:06
4F:→ CoNsTaR: 你是想讲任何(或符合某些条件的)程式都能这样设计吗05/28 19:06
5F:→ CoNsTaR: 要找最好的软体架构这题目太大了,程式语言理论(PLT)就05/28 19:06
6F:→ CoNsTaR: 有在做这个05/28 19:06
7F:→ CoNsTaR: 建议你可以先去参考看看别人已经做出来的研究成果再来谈05/28 19:06
8F:→ CoNsTaR: ~05/28 19:06
其实就是需求往往改变
但弹性不够的情形下也无法配合需求任意修改
如果因应需求而可以轻松任意修改架构的情形下
能够解决许多问题
所有的架构可以细到一个function就成为一个service
也可以一整个大功能就是一个service
这中间是可以透过定义架构来解决
初期设计往往是大功能为service
而随着使用者增加或新功能要使用相同的小功能
势必要再细化
如果单纯只靠软体架构的定义就能够解决
那应该是会轻松很多
※ 编辑: ripple0129 (223.136.41.39), 05/28/2017 19:20:13
9F:→ pttworld: 坦白跟你说你一开始想的功能呈现只是外挂,函式库,模 05/28 19:10
10F:→ pttworld: 组就能做到的结果,但是却硬扯架构,这是知识理解的问05/28 19:10
11F:→ pttworld: 题。05/28 19:10
的确是这样子说没错
但就是你必须要定义你的模组使用方式与流程
透过不同定义来改变架构啊
※ 编辑: ripple0129 (223.136.41.39), 05/28/2017 19:26:32
12F:推 CoNsTaR: 就跟你说你想做的事情别人已经有学术研究了 05/28 19:40
13F:→ CoNsTaR: 曾经看过和你想法很像的(我也曾经这样想过)论文 05/28 19:40
14F:→ CoNsTaR: 试试看找"extensible type system",有很多相关资料05/28 19:40
15F:→ CoNsTaR: 大约的想法是,你可以任意丢新的零件进系统理05/28 19:40
16F:→ CoNsTaR: 所有零件都知道自己能怎麽和其他哪些零件组合、互动05/28 19:40
17F:→ CoNsTaR: 不需要你操心哪个零件的用途如何,你组错了程式就编不过05/28 19:40
18F:→ CoNsTaR: 当然每个系统都有自己的限制,有很多东西是已经被证明无05/28 19:40
19F:→ CoNsTaR: 法达成的,给你参考05/28 19:40
了解感谢关键字
※ 编辑: ripple0129 (223.136.41.39), 05/28/2017 19:44:15
20F:推 CoNsTaR: 像你的做法是所有东西都提供一样的介面 05/28 19:48
21F:→ CoNsTaR: 所以零件之间可以知道怎麽和对方沟通 05/28 19:48
22F:→ CoNsTaR: 我们的做法是需要一样的时候才一样,不需要的时候就不一 05/28 19:48
23F:→ CoNsTaR: 样 05/28 19:48
24F:→ CoNsTaR: 而且能够被组合起来的零件才知道要怎麽和对方沟通 05/28 19:48
25F:→ CoNsTaR: 组不起来的编译就失败了~ 05/28 19:48
26F:推 CoNsTaR: 对了,还有pure subtype system也可以看看 05/28 20:17
27F:推 Windf: 定义档到最後为了要泛用,你会发现写定义跟写程式是一样的 05/28 21:10
28F:推 gmoz: 推楼上 05/28 21:40
29F:推 sunsamy: 不一样喔!当porject量一大就可以看出差异 05/28 21:42