2010-01-05 55 views
8

如上所述,我正在實現一個多層體系結構,以便與WCF和Entity Framework 4(使用poco)一起工作。由於我已經對POCO持久性無知,我需要實現DTO,或者我可以以純粹的方式使用WCF?在Entity Framework 4和... DTO中使用WCF服務?

主要引用是 - 我確實需要DTO在網絡上傳遞一個輕量級對象,或者我可以使用我的POCO實體。

你們推薦什麼?

+1

DTO和POCO是不一樣的。看看[這個不錯的帖子](http://rlacovara.blogspot.com/2009/03/what-is-difference-between-dto-and-poco.html?m=1)。如果最終使用DTO,請考慮使用[EntitiesToDTOs](http://entitiestodtos.codeplex.com)從Entity Framework EDMX文件中自動生成DTO。 – kzfabi 2013-01-24 02:33:13

回答

3

除非您定義「純粹的方式」,否則很難回答。我們在談論SOA純粹還是純粹WCF?

WCF代理已經是DTO的一種方式,因爲它們不會在您的服務合同中帶來任何業務邏輯。在WCF生成的代理類之上創建另一層DTO似乎是多餘的。

您想回答的最大問題是「SOA如何解決這個問題?」。如果你想成爲符合SOA的標準,你不能跨服務邊界共享你的POCO實體。 SOA完全是關於不同的合同。

如果你所有的SOA都基於SOA而不是你失去了很多功能,因爲你的Web層將在大多數時間工作的類將是愚蠢的代理。你必須重複很多邏輯,並且你失去了很多MVC 2提供的「元數據,約定配置」功能。

如果您將SOA流行詞放入粉碎機中,您應該這麼做(http://soafacts.com/),那麼跨層的業務邏輯和元數據信息共享將更容易。如果您的Web服務的唯一使用者是您自己而不是此方法,那麼您可能是您的最佳選擇。

這是您可以使用DTO通過電線發送而不是POCO實體的地方。唯一的缺點是,重複邏輯,大量的鍋爐儀式代碼什麼都不做。真的取決於你的項目的大小。如果它很小,忘記DTO,但是如果你有20個開發人員使用200,000個LoC而不是DTO,那麼可能值得創建。

1

正如jfar所說,它取決於你是否只是一個服務的消費者,或者表示層是否只是你。

如果你正在做的更晚,它只會是你使用你的服務,那麼你可以連載你的POCOs跨越wcf服務的邊界。這是我最近做的事,並寫了這個blog post關於它的工作。這將允許您在應用層和表示層中使用相同的實體。

希望它有幫助。

1

當在EF中使用WCF時推薦DTO的最強有力的理由是EF數據庫優先級將實現依賴性拖拽到您的代理類中。如果您使用POCO類首先使用代碼,那麼應該沒有實現依賴關係。

嘗試僅返回您的POCO類,但仔細查看生成的代理類。確保EF基礎結構的這些類中沒有任何內容。如果代理類是乾淨的,那麼你應該全部設置好。

相關問題