在层中组织应用程序

时间:2011-09-27 13:45:12

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

我正在开发一个名为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服务的字符串属性。

我也在使用Entity框架进行数据库通信(了解如何使用应用程序B完成此操作)。我的.edmx中有两个实体,User和Payer。 我还想使用存储库模式(这是一个不错的选择吗?)来在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中组织我的图层,接口,类?

提前致谢。

1 个答案:

答案 0 :(得分:1)

这是一个问题的一个问题,我想我可能会尝试为你准备一些零件,以便下一个人能够回答......

对于应用程序B(VB6)来调用应用程序/程序集A,我将假设您使用ComVisibleAttribute和类似的方式将App A的相关部分公开为COM组件,就像在this artcle。我只知道另一种方式(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中组织所有这些层和层,我建议您尝试将所有独立层/层保留在自己的解决方案文件夹(r-单击解决方案,添加新解决方案文件夹),或者在某些情况下(较大的项目),有自己的解决方案,最好是自动构建服务,以根据需要更新具有最新组件的相关项目。同样,一个广泛的主题,完全取决于个人喜好。在为潜在的即将到来的Circular References设计应用程序时,请务必留意。

所以,我担心这甚至不会轻微回答你的问题,但希望能为你提供一些资源来检查和几个小时的阅读。

祝你好运!