使用Visual Studio时重用代码的最佳方法?

时间:2020-03-05 18:45:05  来源:igfitidea点击:

我尝试了2种重用代码的不同方法。我有一个完整的解决方案,其中包含带有通用代码的类库项目,这些代码几乎可以在我从事的每个项目中重复使用。当我开始一个新项目时,我将以两种方式之一重用该代码库中的代码。我尝试将我需要的项目从此代码库引入到我的项目中。我还尝试了将其编译为.dll,并从当前解决方案的根目录中的文件夹中引用了该.dll。尽管第二种方法似乎更容易实现,但我总是发现自己对原始代码进行了一些细微的调整,以使其适合我当前项目的上下文。我知道这是一个模糊的问题,但是有人在使用其他在新解决方案上重用类库的方法取得了成功吗?

解决方案

回答

简而言之,我们所做的是正确的,我们想将通用代码移到类库(DLL)中,然后在需要其逻辑的任何项目中引用该代码。

出问题的地方是我们没有维护它。如果我们需要进行一些"调整" subclass并扩展现有代码,请不要对其进行更改。如果需要进行重大更改,则重新考虑设计。

回答

我喜欢这样写我的所有泛型类:泛型。我让它们尽可能地独立于应用程序,并尝试使它们即使没有输入也是如此。如果我创建了一个花哨的Tree类,则将使用泛型将其创建为Tree <T>,以便可以在该类中使用所需的任何类型。如果需要使用Tree来保存GameCharacter对象,则可以实例化Tree <GameCharacter>,但是如果我正在编写业务应用程序,则可以将其用作Tree <Spreadsheet>。

如果发现自己更改了重用库以匹配项目,请尝试使其不那么具体,而应从实际项目中的"库"基类派生。将所有常见逻辑放入库类中,并为应用程序特定的部分创建一个派生类,并在该派生类中实现其逻辑。

就解决方案组织而言,我将重用库作为一个单独的项目保存在一个公用文件夹中,并将该项目包含在我创建的任何解决方案中,这使我可以轻松地对其进行引用,而且还可以对我的应用程序的任何内容进行更改解决方案。

回答

我不使用Visual Studio或者.NET,但它认为此问题在所有程序员中都非常普遍,因此我想对此进行探讨。

当我们尝试将通用代码提取到一个单独的库中时,我们遇到了这样的问题。最初可能没问题,但是最终1个客户端将需要一些新功能并需要更改库。这总是会导致其他一些客户端出现问题,从而造成极大的混乱。除非我们有一种很好的方式来版本库文件,否则这是一个很难解决的问题。

最后,将源文件复制并粘贴到新项目中可能会更好。是的,这违反了DRY(请勿重复自己)原则,但是我们避免了很多与通用库创建的依赖项有关的问题。

回答

我们真正需要做的是使用某种源代码控制软件,例如:

  • 我们在一个项目中所做的任何更改都会反映在所有项目中,而不会丢失参照完整性
  • 我们可以选择保留一个以上的库版本,并引用一个特定的版本,而不用费力找出哪个项目使用哪个版本。

只需确保我们已进行单元测试,以确保我们先前的项目不会受到库中所做任何更改的影响或者仅受到轻微影响。

祝你好运!

回答

@取缔
如果我们需要复制代码并进行特定于应用程序的更改,则该代码不是通用的。应该对其进行重构,以使通用功能保留在通用库中,并且应将特定于应用程序的功能添加到该应用程序代码库中的子类中。

将版本控制与每个应用程序特定版本的分支一起使用可以帮助解决集成问题,使我们在分支中进行更改,然后在将其他应用程序合并回主干之前对其进行测试。如果我们不想自己建立一个免费的在线源代码控制主机,则此网站上存在几个问题。

回答

我已经按照我们提到的两种方式做到了。我喜欢第二个,但是就像我们说的那样,当我们对该库进行更新时,这有点乏味。

我使用的另一种方法是选择一个中心位置来保存图书馆。然后添加带有字符串值的注册表项,以指向该目录。添加参考时,所有库都将显示在.net标签下,就像这些库在GAC中一样。然后,我们可以发出post build命令将库构建到该中央位置。

这是注册表项,更改CompanyName和目录:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\ComapnyName]
@="C:\CentralLocation"

回答

Ayende Rahien的Rhino Tools中提供了一些非常好的可重用代码。不仅看一下他如何实现各种通用代码,还看了它的组织方式。