惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
D
DataBreaches.Net
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The GitHub Blog
The GitHub Blog
Blog — PlanetScale
Blog — PlanetScale
Microsoft Security Blog
Microsoft Security Blog
A
About on SuperTechFans
Vercel News
Vercel News
L
LangChain Blog
B
Blog RSS Feed
Y
Y Combinator Blog
IT之家
IT之家
H
Hackread – Cybersecurity News, Data Breaches, AI and More
GbyAI
GbyAI
V
V2EX
博客园 - 三生石上(FineUI控件)
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
阮一峰的网络日志
阮一峰的网络日志
有赞技术团队
有赞技术团队
D
Docker
V
Visual Studio Blog
aimingoo的专栏
aimingoo的专栏
Last Week in AI
Last Week in AI
月光博客
月光博客

博客园 - chelsea

Performance Tuning Technique: Ultra-Fast ASP.Net 书摘 ASP.Net 备忘 On Extension Method: 扩展方法该如何使用 REST on ASP.Net MVC (and Future) IoC 问题域 Log 问题域 Validation 问题域 C#代码组织: project over folder C#泛型: 消除Visitor模式的循环依赖, 以及无聊的Accept方法 ORM问题域 Web开发问题域 向 Spring.Net 提交的建议被采纳并实现了 开源.Net中文分词组件 [导入]C# 备忘录 The C# Programming Language Notes II [导入]C++/CLI:被忽视的集成技术 DNN4 (DotNetNuke) 备忘录 持续集成 .Net手册 The Programming Language Idioms
代码的物理组织
chelsea · 2010-06-20 · via 博客园 - chelsea

同一个Feature的代码要放在一起(IDE里单独的一个工程, 或者工程里单独的一个文件夹), 这些代码要么全有要么全无的, 它们合作完成一个Feature, 如果用户不再需要这个Feature了, 可以把它们整个的痛快的删掉, 不会留下谁也用不到的代码成为系统的垃圾. 如果想看一个Feature是如何实现的, 那所有相关代码都在一起, 不需要在庞大的代码库中跳来跳去.

那么理想的情况就是: 你看看源代码树里所有工程文件的名字, 或者文件夹的名字, 就知道系统提供了哪些功能, 它可以跟你的需求描述对应起来, 无论用User Story还是Use Case, 都可以用它们的名字作为工程名或者文件夹的名字, 方便维护

流行的MVC框架缺省的物理文件组织并不是这样的, Controller, Model, View分别在不同的文件夹里面. ASP.Net MVC提供了VirtualPathProvider以及ViewEngine, 可以让我们把一个Feature的Controller/Model/View统统打包到一个project或者文件夹而运行时依然能够找到对应的action和view, 这是我们正在利用的特性

这种代码组织方式对架构的影响是什么?

这基本会导致基于插件/扩展点的体系结构. 放到更大尺度上, 就是SOA. SOA才是王道. 这个词太大了, 还是先聚焦到一个进程的应用....

  1. UI如何聚合? 最终用户看到的UI, 是一个聚合的结果, 可能来自系统的不同部分. 解决这个问题的扩展点技术有客户端的Ajax, 或者服务端的RenderAction. (问题: Css应该如何处理? 不同部分的显示顺序, 布局如何确定?)
  2. Feature如何沟通? Feature之间不可能一点依赖没有, 比如可能会用到相同的数据, 相同的业务逻辑. 解决这个问题的方法有Bounded Context, Context Mapping, DCI...都是一回事
  3. 数据库如何划分? 不同的Feature使用自己的独立定义的数据表, 做映射和同步, 也是同样的方案
  4. 如何把这些Feature组装在一起? Java平台有OSGi, .Net目前没有看到跟OSGi类似的方案. 基本是注册或动态发现的路子, 遵循开闭原则...