Architecture 为服务层设计消息

Architecture 为服务层设计消息,architecture,service,message,dto,Architecture,Service,Message,Dto,我将要开发一个小型应用程序,它应该由一个服务器和一个富客户端组成。 到目前为止,我将遵循以下设计准则: 永远不要向客户端公开域对象 将服务消息封装到响应和请求对象 根据用例识别服务例程,使它们始终是原子的 我真正的问题(与语言无关)是我不知道在消息设计(响应和请求对象)方面应该做什么决定 它们是基于可重用部分(例如CustomerData或CustomerData等数据对象)还是每个消息都是单独的;可能对细节和嵌入项使用嵌套类) 我知道,并非每个用例都需要甚至允许显示或更改所涉及实体的所有属

我将要开发一个小型应用程序,它应该由一个服务器和一个富客户端组成。 到目前为止,我将遵循以下设计准则:

  • 永远不要向客户端公开域对象
  • 将服务消息封装到响应和请求对象
  • 根据用例识别服务例程,使它们始终是原子的
我真正的问题(与语言无关)是我不知道在消息设计(响应和请求对象)方面应该做什么决定

它们是基于可重用部分(例如CustomerData或CustomerData等数据对象)还是每个消息都是单独的;可能对细节和嵌入项使用嵌套类)

我知道,并非每个用例都需要甚至允许显示或更改所涉及实体的所有属性,因此导致了一种设计,其中几个消息应该是一组封闭的类

你有什么建议

致以最良好的祝愿

哈里斯探员

编辑:

举一个更详细的例子

假设我们有以下接口:

interface CustomerService {

    /**
     * this use-case should return all necessary data to
     * edit a customer record, including the associated 
     * invoice/delivery addresses
     */

    CustomerRecordResponse getUserRecord(int userId);

}
现在的问题是,如何以这种方式组合CustomerRecordResponse,即它的组件 可重用,但不会为其他可能不可用的用例显示太多信息 允许访问或更改特定属性

我的一个想法是引入小班,必要时可以扩展。 例如:

class CustomerData {

    private String firstName;
    private String lastName;

    // ...
}
这基本上只是一组属性(平面对象)。 现在,当涉及到原子编辑一个完整的记录时,包括一个选项 可以将CustomerData类(可能在本地作为嵌套类)扩展到:

在这里,我将看到可以重用基本类型组件来馈送的优势 已经存在的UI小部件,可能是UI组合的一部分

否则,当设计完全独立的平面消息对象时,所有数据都将是不同的,并且需要大量的开销——在两侧

然而,我的目标是设计一个客户端/服务器应用程序,该应用程序在第1阶段中明确实现
在同构技术(.NET远程处理或Java RMI)中,但可以轻松启用SOAP支持。

定义两个接口:客户端和服务器,以便协议和通信介质可以变化(例如,仅使用内存缓冲区对通信进行单元测试非常有用)。 客户端接口可以非常简单(在消息上(消息ID,NUM_OPS,OPS))

对于每个消息,您可以创建或生成(请参阅)一个类。 然后创建一个从Message_ID到Message对象的映射。
message对象将验证消息并执行相关操作。

定义两个接口:客户端和服务器,以便协议和通信介质可以变化(例如,仅使用内存缓冲区对通信进行单元测试非常有用)。 客户端接口可以非常简单(在消息上(消息ID,NUM_OPS,OPS))

对于每个消息,您可以创建或生成(请参阅)一个类。 然后创建一个从Message_ID到Message对象的映射。
message对象将验证消息并执行相关操作。

我的问题不是我不理解这种通信系统的基本思想。到目前为止,客户机和服务器接口以及消息的使用是绝对清楚的。我的重点实际上在于设计消息对象层次结构。我可能需要一个具体的例子来说明您的关注点,但我认为平面消息层次结构是最好的。您可以用包含每个消息对象所需字段的纯文本自动生成所有相关消息描述。我编辑了我的原始帖子,并试图提供一个更好的示例来说明我的意思。我的问题不是我不理解这种通信系统的基本思想。到目前为止,客户机和服务器接口以及消息的使用是绝对清楚的。我的重点实际上在于设计消息对象层次结构。我可能需要一个具体的例子来说明您的关注点,但我认为平面消息层次结构是最好的。你可以用包含每个消息对象所需字段的纯文本自动生成所有相关消息描述。我编辑了我的原始帖子,并试图提供一个更好的例子来说明我的意思。
class CustomerRecordResponse {
    // nested class:
    class ExtendedCustomerData extends CustomerData {
        private AddressCountryData[] addresses;
    }
}