Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将多个VFP9类转换为C#_C#_Visual Foxpro - Fatal编程技术网

将多个VFP9类转换为C#

将多个VFP9类转换为C#,c#,visual-foxpro,C#,Visual Foxpro,首先,我要说的是,自从Java大学毕业(我于2005年12月毕业)以来,我就没有使用过面向对象编程语言编程。自从我毕业后,我一直在用FoxPro 2.5-VFP9编程。现在,我工作的公司正在推动将我们所有的FoxPro应用程序转换为C 我在这个项目中的一部分是转换我们的报表解析应用程序。在VFP9中,它由5-6个表单组成(在我们创建了一个新的C#前端来替换它时,其中任何一个表单都不会被继承)、一个包含所有标准方法的基类和大约575个解析器类(有些解析器什么也不做,只是设置一些特定于解析器的变量/

首先,我要说的是,自从Java大学毕业(我于2005年12月毕业)以来,我就没有使用过面向对象编程语言编程。自从我毕业后,我一直在用FoxPro 2.5-VFP9编程。现在,我工作的公司正在推动将我们所有的FoxPro应用程序转换为C

我在这个项目中的一部分是转换我们的报表解析应用程序。在VFP9中,它由5-6个表单组成(在我们创建了一个新的C#前端来替换它时,其中任何一个表单都不会被继承)、一个包含所有标准方法的类和大约575个解析器类(有些解析器什么也不做,只是设置一些特定于解析器的变量/属性并调用所需的基类)。有些解析器包含自己的自定义方法,这些方法仍然使用基类方法和全局属性并与之交互

现在回答我的问题

从设计的角度来看,我们希望新的C#前端产生多个可执行文件(3-5个EXE),这些文件将调用新的C#base/parser类库(DLL)。我最初的想法是,我将有一个带有base#Code.cs和其他575个parser.cs文件(H1.cs、H2.cs、H3.cs等)的解决方案/项目。但是,我们需要能够独立于其他文件构建每个.cs文件,因为我的同事正在更新H1.cs时,我可能正在更新Base_Code.cs

我如何最好地构建它?我是保留一个解决方案,但创建576个项目,还是创建576个解决方案,所有这些解决方案都使用与另一个团队当前尝试的名称空间相同的名称空间

我们在整个基本代码和每个解析器(这些将从前端应用程序传入)中使用几个全局变量/属性,如文件路径、文件名等,这些变量/属性将是静态的,因此在考虑设计时也需要考虑到这一点

例如编辑**

C#前端基本上是一个排队系统和文件/状态查看器。这个前端“排队”我们一整天收到的报告。列表顶部的报告决定需要什么DLL。前端应用程序和DLL完全分开

示例:H00001_2342318.MSG-这将调用H00001 DLL H00002_3422551.MSG-这将调用H00002 DLL

每个H00001、H00002等(总共575个DLL)将使用基本DLL中的方法


如果我必须更新H00001 DLL,我需要这样做,而不必重建所有575个DLL。

听起来你想要的是一种“插件”式的体系结构。这样你就可以在不重新编译主应用程序的情况下插入/更新DLL(程序集)

例如


和相关。

576个项目和/或解决方案是维护的噩梦。我的项目和/或解决方案少得多(大约75个)针对一整套产品的不到十几个解决方案的项目。这包括测试、框架组件等。我保持领先地位的唯一方法是通过严格的命名/路径约定、源代码控制和自动化脚本

说到测试,您应该计划单元测试(greenfield development为此提供了一个极好的机会;不要错过这个机会)。测试在一个单独的项目中进行;这是不应该为每个类提供自己的程序集的另一个原因。从理论上讲,您可以将项目数量增加一倍

我将从一个具有逻辑上分离的项目的单一解决方案开始(例如,按函数/依赖项进行划分,并为每个库添加一个测试项目)

源代码控制消除了对团队成员之间冲突的任何担心。如果您有内部控制源代码运行和运行的内在挑战,请查看Team Foundation Services在线:安装非常简单,并且最多可免费访问5个用户。

如果您最终需要在项目之间进行更大的断开连接,您可能需要考虑使用NuGET软件包来隔离/版本不同的、分立的组件。这不是我的第一步,但这是一个值得记住的选项。

从评论中可以看出,您目前正在执行自治单元的日常部署

  • 这似乎有风险。这是由配置/数据而不是代码更改驱动的吗

  • 576个完全自治的单元似乎是应用程序设计的一个问题(例如重用?)

  • 假设每天都必须部署新代码,也许脚本语言+DLR可以让这更容易。c#的动态编译也是一种可能


  • “我们需要独立于其他文件构建每个.cs文件的能力,因为我的同事正在更新H1.cs,而我可能正在更新Base_code.cs”
    -我不确定我是否遵循了这条推理路线。我不明白团队成员为什么不能根据需要从源代码管理中修改文件(即使是同一个文件)。当需要进行新的构建时,从源代码管理中重新构建。为什么每个文件都有必要成为自己的程序集?576个项目和576个程序集(每个都有一个类)的维护等开销很大。就像@David所说的,对我来说,这听起来像是解决方案1项目1程序集和正确使用源代码管理。@David I个人从未使用过源代码管理,但我理解其目的,我同意这可能是最好的选择。但是,我们没有任何源代码管理(尽管我们已经要求过,我相信其他部门正在使用TFS或SourceSafe)。不幸的是,这家公司在获得任何东西方面都跟国会一样慢,所以不能保证我们会很快得到它。@Spoon82:即使没有源代码管理,我仍然不认为有理由将每个类都放入自己的编译程序集中。如果问题的根源是缺乏源代码管理,那么解决方法就是使用源代码管理。所以解决方案不是让代码变得模糊,以至于您确信自己不需要源代码控制。