在我的公司(我最近加入)中,一个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和查询操作?
的问题要问将沿“线这是否重写提供给企业带来什么好处?你能保证不会有任何需要重写其他应用程序?多少时间是这样的要去?“而且,管理层最喜欢的问题是:“这会花多少钱?”。我建议最好是实现业务所需的功能,而不是着手对没有明确的业务收益或目标的有效代码库进行大量改写。 –
这个问题可能有点意见为主,但这里有一个类似的线程,涵盖的话题相当不错:数据库需要多少业务逻辑的实现?(http://softwareengineering.stackexchange.com/questions/194446/how -much-业务逻辑应该最数据库实现) –
此外,[这个线程(http://softwareengineering.stackexchange.com/questions/170808/do-stored-procedures-violate-three-tier-separation )(前面提到的)涵盖了同一主题。 –