当然,很多能以简单的CRUD用户界面形式呈现领域对象模型的框架都提供了数据库的浏览或维护功能。Naked Objects之所以获得更多关注,则是它能够生成完整功能的应用程序。默认情况下,任何公共方法对于用户而言都是可用的,形式则是通过在对象图标上弹出 菜单的动作,而方法名则以动作名进行重新格式:
如果方法具有参数方法签名,通常会创建一个对话框用于调用动作,如:
public IExpenseItem CopyAnExistingExpenseItem( IExpenseItem otherItem)
则呈现为:
Other Item字段要求用户拖动或粘贴一个类型为IExpenseItem(UI字段会拒绝其他任何类型的对象)的现有对象。在字段的右边同样是一个下拉框指示器,它能够自动提供一个列表对象,其类型在其他标签上对用户是可见的,这样就能够避免不必要的标签转换。
如果Expense Item在屏幕或下拉列表中不存在,用户如何能够找到它?或者说,当他们没有另外一个对象作为开始对象时,用户该如何创建一个新的对象实例?这正是仓储模 式和工厂模式所要解决的,它们都是领域驱动设计的标准模式。在Naked Objects的术语中,仓储和工厂都是服务样本,服务本身就是最上等的领域对象。服务的使用有三种方式。