2016-11-24 93 views
1

在我的公司(我最近加入)中,一个ASP.net解决方案用于为客户提供基于http的RESTful API。将基于存储过程的解决方案迁移到OOP?

在事实,这种“API层”层是非常“瘦”有很多方法,这些方法只包含2行代码:将参数+主叫更深层。

因此,“API层”传递给它通过HTTP得到召唤到下一层,其将属性“业务对象”,这主要是班级,性质而已,几乎没有逻辑的参数。这个“业务层”再次将这些属性传递给一个“存储库层”,该存储层填充另一个类(“参数类”)的属性,最后用这些参数调用存储过程。

几乎所有的“业务逻辑”都在存储过程中“隐藏”。

当它们被调用时,它们将它们的参数传递回C#存储库层类并将其全部转换回“API层”。

所以简而言之:C#类没有真正使用任何逻辑或OOP。实际上,它们很可能可以从存储过程参数自动创建,因为它们很简单:它们收集API参数,将它们传递到数据库(Oracle)到存储过程,并将存储过程调用的结果传递回API。

正如您从所描述的“架构”中所期望的那样,目前没有单元测试和集成测试。

所描述的架构比较陈旧,我猜想在80年代,在数据库中创建所有BL可能有意义。

因为我习惯了TDD,我开始创建对现有的代码库,这是困难的,因为它不是为心中可测试性的单元测试。不幸的是,除了“正确的”参数调用“正确的”存储过程之外,还没有太多的测试。

对于未来,计划,即通过存储过程访问数据库应该是唯一允许的方式,使移动到某种O/R映射器可能是遥不可及的。

您对这个“建筑”有什么看法?

它与我迄今在职业生涯中看到的任何(有用)代码都不相似。 (编程C#自从1.0版本,C++)之前

我习惯了TDD,写在C#类的业务逻辑,使用OOP机制,可靠的代码,图案,...

的数据库通常是“持久性层“,只能用O/R映射器访问。

所以我不知道从哪里开始。你会如何开始,将这个80年代的“架构”转换为更多的OOP风格?

我想运用现代OOP编程风格来创建可维护,可测试的自动和自适应的解决方案,而不是继续把逻辑存储过程和使用C#一样的包装来调用这些程序。

也许我可以创建一个原型,使用实体框架通过调用存储过程来做一些基本的CRUD和查询操作?

+1

的问题要问将沿“线这是否重写提供给企业带来什么好处?你能保证不会有任何需要重写其他应用程序?多少时间是这样的要去?“而且,管理层最喜欢的问题是:“这会花多少钱?”。我建议最好是实现业务所需的功能,而不是着手对没有明确的业务收益或目标的有效代码库进行大量改写。 –

+0

这个问题可能有点意见为主,但这里有一个类似的线程,涵盖的话题相当不错:数据库需要多少业务逻辑的实现?(http://softwareengineering.stackexchange.com/questions/194446/how -much-业务逻辑应该最数据库实现) –

+0

此外,[这个线程(http://softwareengineering.stackexchange.com/questions/170808/do-stored-procedures-violate-three-tier-separation )(前​​面提到的)涵盖了同一主题。 –

回答

0

感谢您的回复! 我完全同意,只要事情需要付出努力,总会有“商业价值”作为好处。

“大老式稳定”应用程序的问题是需要新功能并且不断添加(在存储的程序中),但很多代码已经很老了,没有人知道它的真正用处。也没有人知道,如果添加新功能可能会破坏现有的“稳定应用程序”。

“稳定性”是一个必须具备的要求,可惜的是在我看来时不能保证,没有添加任何的测试功能后增加功能时 - 事情甚至会进一步降低。

至少那是我的经验和我曾在一个项目中,正是这种happended的代码库一直在努力。回到现在,我们没有测试,也不了解优秀的实践。事实上,在3年后,我们不得不抛弃整个代码库并从头开始......是的,这是我们第二次首先了解了良好实践,并以TDD方式进行了实践,并且代码库仍然具有足够的适应性以添加新的要求,6年后。

所以我已经学会了“辛苦”,为什么一个可测试和适应性代码库是重要的,希望我和我的团队不必再走上这条路。 :)你会