【发布时间】:2017-02-20 02:56:54
【问题描述】:
我和我的团队正在寻找证据来支持类似功能的多库方法,或者将所有这些功能浓缩在单个服务层中。重要的是要注意,这将位于 Web api 之后,并且任何一种方法都是有效的,但我们需要决定哪种方法更有好处。为了说明我们正在查看的层,我们将拥有以下内容:
Solution
WebAPI
Services ---- This is what we're looking at
DataAccess
请记住,如果我们确实使用了多库方法,我们仍然会有一个 Services 项目,但它会更精简并且具有更具体的功能。我们不打算独立部署这些库,但需要在同一个解决方案中引用它们,或者通过 web api 访问它们。
我们其他人会提出如下建议:
Solution
WebAPI
Services
Services.Geography ---
Services.Membership --- This is the alternative approach
Services.ProductDelivery ---
etc...
我们在第一个选项中看到的好处是将所有这些代码组织在一个库中,这样可以更轻松地提取重复代码、潜在的单元测试,并可能从构建过程中减轻一些负担。
选项 2 的好处是项目之间的功能有清晰的划分,具有可在需要时可移植的独立代码,并且通常能够独立处理和配置应用程序的不同方面。
我们在选项一中看到的缺点是服务层现在负责应用程序的每个方面,这会使库膨胀,并且在我看来有点违反单一职责。我们意识到该规则并不像方法和类那样适用于库,但似乎通过分离功能还有其他好处。也有可能错误地将代码放置在不属于它的地方,或者在可能不适用的地方使用可用于整个项目的类。
选项 2 的缺点是明显增加了项目构建的开销,在配置中工作(即使这可能是可取的)并且可能会使解决方案因过多的项目而变得混乱。我认为我们计划将类似的功能整合到单个项目中(即,我们可能会在该项目中构建 ProductDelivery 的多个实现,以便能够在它们之间切换或出于不同原因使用不同的实现)。
我们意识到我们所有的业务规则都可以用任何一种方法来完成,我们只是在决定哪种方法是更好的实践方面陷入僵局。
所以问题是,这两种方法中哪一种更好?
【问题讨论】:
标签: c# .net architecture n-tier-architecture