旨在设计一种将业务逻辑从存储过程转换为C#业务层的工具

问题描述 投票:7回答:6

[由于已经讨论了elsewhere,因此无需讨论业务逻辑应该在数据库中还是在应用程序层中。

我的团队正在翻译100K +行PL / SQL代码,并将逻辑从数据库移到应用程序中。我们使用VB6直接调用Oracle 9i存储过程和即席查询,现在使用的是带有NHibernate的C#、. net 3.5,Winforms到Oracle 9i数据库。

我们已经找到了一个很棒的工具来协助转换即席查询SmartCode,但它仅基于表和视图创建代码。我们正在寻找一种工具来协助转换存储过程。

存储过程中包含我们要迁移到应用程序层的大多数业务逻辑。我们想知道是否有任何工具可以将存储过程转换为C#代码。

假设没有,那么如果我们内部/开源开发该工具,那将是最佳的起点。是否有另一个具有相似目标的相似系统可以用作起点?

接受的答案更新:我选择了范围蠕变的答案,因为它似乎是实现问题中提出的问题的最佳方法。对于那些处理相同问题的人,我衷心推荐亚当的回应,因为他极力主张不要使用工具并提供有力的理由。他也对此问题提供了最多的互动,并给予了最多的答复。

感谢大家的帮助和对话。

c# nhibernate oracle9i
6个回答
3
投票

一种方法是使用ANTLR v3,以构造域特定的语言。 ANTLR V3有一个10g,11g的PL / SQL Pl / SQL grammer,可以为PL / SQL构造一个词法分析器/解析器,这是第一步。 C#3.0代码生成器可用于C#3.0的后端。代码生成器仍在开发中,但是处于高级状态。

我不知道这种方法会导致多少工作,但我当然认为这比手工翻译要便宜。

[有一本书叫The Definitive ANTLR Reference: Building Domain-Specific Languages 。我知道这时建议一本书,当您的工作量很少时,这很烦人,但是它可以使您对所涉及的过程有所了解,并且也许足以使转换花费很多。

关于堆栈溢出已经有一个问题:Writing a Language Translator链接到ANTLR Morph项目,这是一个定义通用转换机制的子项目。 DocFAQ解释了它是如何工作的。本质上,脚本用于定义翻译机制。它尚处于早期阶段,但值得一看,因为这是一个尚未解决的常见情况。

[此示例说明了如何创建树转换,即遍历树以输出翻译后的代码,可在以下位置找到:Tree Translations,以及相关的ANTLR文档:Tree Consuruction

找到合适的编译器工程师将是成功的关键。我看了一些站点,他们有一些编译器工程师。我认为雇用1或2个编译器工程师进行3个月以上的工作要比雇用4个以上工程师进行3个月以上的人工翻译要便宜。在英国,您会寻找承包商来做。

希望有帮助鲍勃。

编辑:01/08

我发现了另一本书,该书讨论了如何创建语言翻译,该书名为Language Implementation Patterns


13
投票

我不相信有任何SQL到C#的转换器。

关于创建这种工具的方法,我首先要说的是,不要...您的业务需求听起来像是将逻辑纳入C#。

根据应用程序的状态,您可以通过多种方式执行此操作:一次存储一个;一次的逻辑实体(所有客户逻辑等);整只猪敏捷的地方,暂时暂时不使用sproc,然后直接从C#中对其进行调用,然后慢慢采用以前的方法之一-始终将自己留在运行正常的应用程序中。

确实有问题:-)

我个人首先会尝试使其直接在sproc中的C#中运行。然后使用逻辑实体,因为您会发现它们可以引用其他存储过程。一次执行sproc将使开发过程中的C#逻辑变得支离破碎,并为业务类的创建增加了额外的开销。

C#域模型的优势是职责和行为分组到逻辑实体中的明确界限-因此一次使用一个存储过程,您将看不到大局。使用转换器,它将以难以理解,难以管理的代码结尾,然后您必须学习这些代码-如果您首先创建它,则无需执行任何操作。

因此,我的结论(如果有的话,是为了节省自己的时间,并以此为契机来重新设计业务层-因为您可能从野外就拥有系统的生产行为的知识和经验,所以转换可以吸收任何经验教训。

更新:事实证明您有转换的工具选项。对于这种方法,我唯一要说的是:结果代码将不会很漂亮。您的好处是开发团队可以理解您当前的SQL-他们知道代码。代码生成器将生成100%没人知道的新代码。学习曲线...您将需要verify工具的输出以确保它不会改变您的逻辑-没有工具是绝对可靠的。

如果您决定使用该工具,我只能建议将转换分解为非常小的部分(大概最小的部分将是一个脚本(甚至可能是一个脚本中的批处理))。当您获得少量转换结果时,请将其集成到应用程序中,并通过审核过程。


0
投票

我找不到将PL / SQL直接转换为C#的任何产品,但是找到了将PL / SQL转换为Java(然后可以将其转换为C#的几种产品。)>

将PL / SQL转换为Java:

SwisSQL:http://www.swissql.com/products/oracle-to-java/oracle-to-java.html出埃及记:http://www.ciphersoftinc.com/products/plsql-to-java-conversion-tools.html

将Java转换为C#

StackOverflow答案:Tool to convert java to c# code


0
投票

基于示波器蠕变,Adam和Ira-Baxter的输入。特别是,关于一口气做事,明确责任范围和行为分组


0
投票

@@ Lucas:我正在寻找类似的工具。您能否更新您的前进方式,或分享可能有用的任何工具的详细信息。需要将业务逻辑从SQL Server存储过程转换为C#。


-1
投票

我希望这会有所帮助:

© www.soinside.com 2019 - 2024. All rights reserved.