2012-09-24 52 views
3

这更多的是设计而不是实现问题。我们有一个VB.NET前端到我们的数据库。目前的设计是使用元数据表来强制执行“前端没有SQL”策略。我认为我们所做的事情比硬编码差,因为我们现在拥有一大堆STORED PROC意大利面条代码。我们有很多动态SQL用于构建表格的全限定名称,然后将其发送回另一个处理实际加载平面文本文件的STORED PROC,例如。VB.NET GUI - TSQL动态SQL梦魇设计

ID DATA_TABLE_NAME DATA_TABLE_SCHEMA PTR_TABLE_NAME PTR_TABLE_SCHEMA 
    1 datatable   DBO   datatable_ptr  DBO 

所以我们有一个类,会抢了数据表名和表指针,它捣碎成在VB.NET前端类发送一个完整的名称,如database.dbo.datatable映射到database.dbo.datable_ptr并使用全局临时表来加载平面文本文件。那么有人在这个令人讨厌的元数据表中添加了一行,并且它使VB.NET FRONT END结束!有一个更好的方法来做到这一点,但我没有足够的经验来提出一个更好的通用解决方案。

程序员如何强调使用T-SQL和VB.NET的代码重用和通用编程,同时保持代码的可读性和可维护性?有没有人对设计模式的书籍或烹饪书籍有一些建议,可以让我指出一些更实用的解决方案?

+2

哎唷!这主要是一个数据录入应用程序,你正在寻找重用/执行业务逻辑或更多的报告应用程序?不幸的是,找到解决方案可能会更容易实现。然后,在你答应月球买入之前,你最好阅读 PatFromCanada

+0

这是一个数据录入应用程序,它接受来自其他机构的文本文件转储(一旦大小适合任何数据),然后进入我们的数据库中进行模拟。前端旨在统一我的部门用于将数据加载到数据库中的35个以上应用程序。每位主题专家都有自己的数据“fiefdom”,以及数据分析师提供的旧软件,这些软件工程师或数据库管理员没有受过培训。我负责维护和增强这个新的“主装载机”,同时我们有一个新的后端设计承包商。 – OpsResearch36

+1

如果您使用的是SQL服务器,我会仔细查看一下SQL Server Integration Services,但最近我还没有使用它来推荐一个好的当前源。 – PatFromCanada

回答

1

在我开始提出的解决方案,我相信,我需要先透露一些事情:

1)我只一点点超过2年的专业编程经验。
2)我是短视的,因为我只有我每天使用的数据库的经验。
3)我只与一个(和当前)vb.Net/TSQL公司合作。

这就是说,这里是我会做给下面的内容:

1)你的经理将最有可能希望看到某种量化的进步。
2)您正在寻找一个实用的方法关于如何解决这个问题(这个提议的解决方案提供了什么),以促进所述可量化的进展。
3)您需要维护“前端没有SQL”的理念。
4)您需要一些可扩展的功能,因此当35个以上的应用程序变成75个以上的应用程序时,您仍然可以。

解决方案:
1.创建一个新数据库,就好像前端允许使用SQL(即'您一直想要的东西')。
2.创建一个Web服务,它将充当前端(不能拥有SQL)和数据库“你一直想要的”之间的中介。这将解决问题。数据库结构不需要被混淆,因为它将从最终用户中移除两次。

方法:
1)最初,动态SQL可以按原样移动到Web服务。它可以留在那里,因为意大利面条的一部分被翻译。我们可以称之为“主功能”,或者“做事的旧方式”。
2)为每个应用程序指定一个组长(或每5个应用程序中的一个组长)等。他们的责任将是创建他们的网络服务部分的流程。您需要知道他们需要什么表格,并且他们需要了解他们创建Web服务时所需的格式。
3)取上的应用程序一次一个:建立,他们需要
      B中的数据库表)创建Web服务接口这些表与前端
 
      A)     C)从前端创建函数调用来访问Web服务。首先尝试使用新的数据库表,将       这个新函数与新数据库表连接,然后尝试使用主函数与数据库进行接口,就像现在一样。

随着应用程序切换到利用其“个性化”网络服务功能,主功能应该越来越少(即,您的 缓慢停止使用意大利面条存储过程)。另外,随着Web服务的创建(其结束时可能有多个应用程序的贡献者)是分散的,这项工作可以相当迅速地进行,并且由于主功能将首先起床并且运行时,您的整体运营仍然可以像平常一样开展业务。