繁体   English   中英

如何在不使用域特定对象的情况下将值从数据库传递到UI

[英]How to pass values from database to UI without using domain specific objects

最近,我看了罗伯特·C·马丁(Robert C. Martin) s lectures, and in one he mentions that NO domain specific objects should be passed to UI, and that UI shouldn一些s lectures, and in one he mentions that NO domain specific objects should be passed to UI, and that UI shouldn具有特定于域的对象和业务逻辑的知识。 我的问题是如何在不将域对象传递给UI的情况下传递一个域对象应在其字段中包含的所有数据? 我应该使用集合或数组还是其他东西?

谢谢

我没有看过这些具体的讲座,但这似乎与N层体系结构的设计理念有关,例如MVC(与ASP.Net共同使用)和MVVM(与WPF应用程序共同使用)。 这些想法并不是要您的视图不使用自定义对象,而仅仅是要用来对数据进行建模的对象不应该包含可能随环境而改变的许多特定业务逻辑。

例如,如果数据库中的表是BillSummaries ,则可能有一个名为BillSummary的对象, BillSummary包含一个customer ,一个date ,一个subtotalfees total tax totalgrand total 您可以使用数据访问层从数据库中检索数据并创建对象(这样做的原因是,您可以轻松更改方法并为SQL Server,Oracle和Web服务创建不同的数据访问类,而无需更改您的任何用户界面代码-用户界面都不在乎对象的来源,只是它获得了所需的对象类型。

对象本身应尽可能简单,以便您可以轻松地在不同平台上的不同应用程序之间来回传递该对象(例如,与Java Web服务通信的.Net应用程序,或具有Xamarin移动版的.Net应用程序,支持它的应用程序。)您使用的自定义数据类型和内置逻辑越多,在不同项目之间共享对象通常就需要付出更多的努力。

如果您有用于计算税费总额的代码,那么这就是业务逻辑的一个示例。 它属于不同的层(控制器或视图模型)。 这样做的原因是,如果您扩展到其他国家或地区,则可能会有不同类型的费用,需要进行不同的计算。 如果执行此操作,则可以在不更改UI代码,不更改对象类(模型)或数据访问代码的情况下替换视图模型。 您甚至可以并行运行不同的控制器或视图模型,以根据不同的客户居住的地方来支持它们。

因此,为了追赶而已,没有看过讲座,而是根据您所描述的内容,我认为他的意思是您的视图/ UI应该只希望包含基本数据字段的“骨架类型对象”。 您可以将UI绑定到这些上,或将它们用作一种工具来在层与层之间传递数据。 但是,为了最大程度地提高代码的可重用性和灵活性,应避免在这些模型对象中包括与数据库通信的代码或实现特定业务逻辑的代码。 当他谈论“特定于域的”时,我怀疑他指的是与组织存储数据的方式,组织所拥有的业务规则等相关的事物(这些事物属于其他层)。 )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM