使用WCF跳入N层架构?

6
我在一家规模较大的州政府机构工作,但我们的技能已经过时,预算冻结使得无法进行培训或招聘新员工/顾问(解雇也不可能)。设计业务对象、实施设计模式、建立代码库和服务、单元测试、源代码控制等等,这些在这里都找不到。我们在 Joel 测试中可以说是得分为 0。好消息是,我们只能从这里开始向上走!
我们开发桌面 CRUD 应用程序(使用 C++、C# 或 Java),通过 ODBC 连接直接访问 Oracle 数据库。基本上,我们的 GUI 中充满了 SQL 语句和拼凑而成的代码。我们被告知要向面向服务的 n 层架构转移,以防止直接访问数据库,并消除用户机器上的 Oracle 客户端需求。

我们是否应该走WCF这条路?我们已经完成了一些n层应用程序的演练(比如this one),它们似乎很容易实现,但我们并不了解足够的知识来判断我们是否在考虑正确的技术。利用.NET生成的类型化数据集似乎是一个不错的权宜之计,可以节省我们数月/数年的工作时间(而不是为众多项目从头创建新的业务对象)。这种预制方法对于第一步来说是否可行?


1
感谢大家的意见。看起来我们可以进行彻底的概念验证了。由于很多答案都反映了同样的事情,所以我选择了第一个答案。 - BikeMrown
5个回答

4

最近我开始在一些web应用程序中使用WCF服务作为我的数据层,起初很令人沮丧(头几周),但一旦代码部署好了,它就完全值得。

你首先应该尝试在一个小的现有应用程序中使用它,或者做一个概念验证以确保它能够满足你的需求。

从你所处环境的描述中,我相信你几乎可以立即意识到它的好处。


请问您能否回答一下这个网址上的问题:http://stackoverflow.com/questions/9498962/contract-first-soa-designing-business-domain-wcf ? - LCJ

2
我曾经工作的公司选择了 WCF,原因几乎和您上面描述的一样。WCF 有很多好的文档和书籍,它相对容易使用,而且支持许多配置选项。
当你开始努力使 WCF 以不特别设计的方式工作时,可能会遇到一些麻烦。这些通常是配置问题。但像这样的网站或 IDesign 可以帮助您解决这些问题。

请问您可以回答一下这个问题吗?http://stackoverflow.com/questions/9498962/contract-first-soa-designing-business-domain-wcf - LCJ

2
首先,我绝对不会(抱歉要强调一下)担心使用已键入的 DataSet 与创建自己的业务对象相比节省的时间。这通常不是您开发时花费大量时间的地方。我自己更喜欢使用业务对象。
在您的情况下,我想先实施一个概念验证。解决可能遇到的所有问题。这个概念验证应该实现整个用例,从客户端开始,从数据库检索数据并将其返回给客户端。您应该在继续之前对您的实现感到自信。
然后关于技术选择。WCF 绝对是客户应用程序和服务层之间通信的好选择。我想你的客户端和服务层都将成为 C# 应用程序?这使事情变得更加容易,因为不同平台之间的互操作性(例如 Java / C#)仍然不是微不足道的,尽管它应该在大多数情况下工作。

是的,客户端和服务层都将完全转移到C#。我理解你关于业务对象的观点。我只是认为,类型化数据集可能会使一些开发人员在学习更多关于对象设计的知识时,过渡变得不那么令人生畏。 - BikeMrown
我不同意认为类型化数据集能够更好地教授面向对象设计,相反,它们只是一个围绕着DataReader的薄层,并且在幕后进行了很多工作以使其按照所需方式运行。这并不是一种非常透明的技术,一旦开始使用,就会变得相当复杂。 - Ronald Wildenberg
我的评论可能会误导人。我同意你对于类型化数据集和面向对象设计之间的冲突的看法。我指的是将类型化数据集作为一种权宜之计来推动他们的项目进展,而不是将其作为业务对象学习经验。你的观点让我想到,由于技术的不透明和复杂性,这样做是否只会让他们更加困惑。 - BikeMrown
那只是我对这项技术的经验。你可能想考虑另一种数据访问技术,比如Entity Framework。它有一些学习曲线,但会给你很多灵活性。不幸的是,在你可以映射到数据库中的内容上它有一些限制(所以先测试一下)。 - Ronald Wildenberg

2

看看Entity Framework(因为已经有几个适用于它的Oracle提供程序)以及与.NET 3.5 SP1一起使用,这可以使您的EF生成类内置WCF序列化。

这是一个不错的博客供您入门:http://blogs.msdn.com/dsimmons


2

CSLA 可能非常适合您的N-Tier桌面应用程序。它支持WCF,拥有庞大的开发社区,并且文档齐全。它非常面向对象。


非常有趣!我之前还未接触过CSLA,看起来很有前途。感谢您的建议。 - BikeMrown
CSLA 的一个好处是,你可以通过简单地更改配置而不是代码来选择使用 Remoting、WCF 或自定义协议。在未来的几年里,微软可能会有另一个首选通信框架。CSLA 可以为您的应用程序提供一定程度的隔离。 - Todd Stout
请回答以下问题:http://stackoverflow.com/questions/9498962/contract-first-soa-designing-business-domain-wcf? - LCJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接