【问题标题】:Organizing application in layers分层组织应用程序
【发布时间】:2011-09-27 13:45:12
【问题描述】:

我正在开发名为 A 的应用程序的一部分。我想将我的 DLL 插入的应用程序 B 位于 vb 6 中,而我的代码位于 vb.net 中。 (应用程序 B 将及时转换为 vb.net)我的主要问题是,我组织代码(应用程序 A)的最佳方式是什么?

我想将应用A拆分成层(服务、业务、数据访问),所以当B转换为vb.net时,应用A集成到B中会很容易。我还想了解分层架构、模式、依赖反转、实体框架等所有主题。虽然我的应用程序 (A) 很小,但我想以最好的方式组织我的代码。

我正在使用的应用程序 (A) 正在使用 Web 服务来验证用户身份并将架构发送到组织。应用程序 B 的用户正在选择应用程序 B 中的一个菜单点,然后调用我的应用程序 A 中的一些功能。

在应用程序 A 中,我有一个从 xsd 模式自动生成的模式类。我用数据填充此模式对象并将对象序列化为内存字符串(使用内存字符串是一个很好的解决方案吗,我不必保存数据),将 xml 包装在 CDATA 块中并返回 CDATA 块作为字符串并将 CDATA 块分配给 Web 服务的字符串属性。

我还在使用实体框架进行数据库通信(以了解如何为应用程序 B 的未来工作完成此操作)。我的 .edmx 中有两个实体,用户和付款人。 我还想使用存储库模式(这是一个不错的选择吗?)在 DAL 和 BLL 之间建立一个外观。

我的应用程序具有 GeneratingSchema(用数据填充架构对象)、GetSchemaContent、GetSchemaInformation、GenerateCDATABlock、WriteToTextFile、MemoryStreamToString、EncryptData 和一些使用 Web 服务的函数,如 SendShema、AuthenticateUser、GetAvalibelServises 等。

我不确定我应该把它们放在哪里? 我想我必须有一些接口,如 IRepository、ISchema(自动生成的模式类的合同,我该怎么做?) ICryptoManager、IFileManager 等,以及实现接口的类。

我的 DAL 将是实体框架。我想在我的 BLL(IRepository、UserRepository、PayerRepository)和管理类(如我上面提到的类)中拥有一个存储库外观,并持有 WriteToFile、EncryptData 等函数......

这是一个好的解决方案吗(我是否需要一个服务层,我的所有 GUI 都在应用程序 B 中)以及如何在 Visual Studio 中组织我的层、接口、类和函数?

提前致谢。

【问题讨论】:

  • 你的问题很好,但范围很大。它有点要求一个完整的应用程序设计作为答案。我会支持你得到的任何建设性答案:-)

标签: visual-studio architecture interface layer code-organization


【解决方案1】:

这是一个非常糟糕的问题,我想我可能会尝试为你减少一些部分,这样下一个人就可以回答更少了......

对于应用程序 B (VB6) 调用应用程序/程序集 A,我将假设您使用 ComVisibleAttributes 和类似方法将应用程序 A 的相关部分公开为 COM 组件,就像在 @987654322 中描述的一样@。我只知道另一种方法 (WCF over COM),但我自己从未尝试过。

将您的解决方案分成不同的层和层是一个非常主观/有争议的话题,并且总是归结为个人偏好、业务需求、可用时间等的组合。但是,无论您的深度如何层和层,了解其方式和原因是很好的。

为了帮助您入门,这里有几篇文章:

Inversion of Control 现在也是一个非常好的模式,随着 .Net 平台可用的资源不断增加(而且非常棒!),绝对值得花一些时间来学习。

虽然我还没有探索过 IoC 的全部范围,但我确实喜欢 dependency injection(如果我理解正确的话,这是一种 IoC,尽管人们似乎对 IoC/DI 术语感到困惑 )。我个人目前对 DI 的偏好是开源的Ninject 项目,它有大量的在线资源和合理的wiki section 与您讨论各个方面。

关于 DI 和 IoC 的内容还有很多,所以我什至不想尝试为您提供一份完整的列表,以免因错过某人的最爱而受到抨击。只需搜索一下,看看您喜欢哪个外观并玩一下。如果有时间,请务必尝试一对。

同样,Repository Pattern - 通常由Unit of Work Pattern 很好地补充,也是值得数小时思考的好话题。我在互联网上看到了很多好的例子,也看到了很多不好的例子。我在这里唯一的建议是自己尝试一下……看看什么对你有用,开发一个最适合你的模式版本,并尽量保持一致性以实现可维护性。

为了在 VS 中组织所有这些层和层,我建议尝试将所有独立层/层保留在它们自己的解决方案文件夹中(右击解决方案,添加新的解决方案文件夹),或者在某些情况下(较大的项目),有自己的解决方案,最好是自动构建服务,以根据需要使用最新的程序集更新依赖项目。再次,一个广泛的主题,完全取决于个人喜好。在为即将到来的Circular References 设计您的应用程序时,请密切注意。

所以,恐怕这甚至没有回答您的问题,但希望为您提供一些资源来检查和几个小时的阅读。

祝你好运!

【讨论】:

  • 非常感谢您花时间回答我!我会调查你提到的事情!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-28
  • 1970-01-01
  • 2020-02-03
  • 1970-01-01
  • 2010-10-05
  • 2011-05-19
相关资源
最近更新 更多