首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加新类型时关注点的分离

添加新类型时关注点的分离
EN

Software Engineering用户
提问于 2010-09-09 13:40:39
回答 1查看 250关注 0票数 7

我这周一直在开发一个系统,在这个系统中,我很难平衡关注点的分离和易于扩展的特性。我在系统里增加了新的类型,感觉就像散弹枪手术。

其基本思想是从远程系统收集(轮询)数据,然后将其提供给许多不同类型的客户端。为了支持他们的接口类型(协议),我正在做大量的翻译工作。

我要试着简化这件事,这样我就可以把它装进一个试题框里。

世界上有一个带有SNMP接口的FruitService。我的出版商的工作是收集这些数据,然后发布。

  1. 因此,对于我们决定发布的每一种新的果树,我创建了一个类,它知道如何通过SNMP提取该水果的属性。
  2. 在内部,果树被转换为DTO(用于与客户端#1 (RMI)对话的相同对象)。
  3. 缓存将被更新并检查以触发异步通知的更改。
  4. 将结果转换为另一个客户端使用的xml模式的类(#2)。
  5. 将结果转换为另一个客户端使用的简单属性/值对的类(#3)。

最后,我创建了5个类,并编辑了8个来插入一个新类型。这不是很多工作;为一个简单的类型编写代码、测试和签入需要几个小时。请注意,在水果类型(例如:梨和椰子)中没有太多的共同性,所以大多数常见的抽象都是基于更新数据的过程,而不是数据本身。

我的设计关注点是:

  1. SNMP接口每年更改2-3次。
  2. xml模式(客户机2)每年更改10次。
  3. 添加新类型的频率较低,通常是在有人接近它的时候。但如果再简单点..。

因此,设计的名义目标是容易地处理这些外部变化。这导致了翻译层的所有分离。但是添加类型感觉比我想的要难。

有什么技术或例子我可以研究吗?我错过了一个主意?我是不是应用了错误的SRP,并且应该有一种会说SNNP、xml模式、DTO等的Apple类型?

编辑:

客户机#1,RMI客户端,是在添加新水果时定制编写的,以利用所有水果的功能。因此,如果我们决定从FruitService中提取香蕉信息,我们还将编写一个客户端,允许您剥香蕉皮,在香蕉成熟时得到通知,并告诉您香蕉属于哪一束--以及基本的水果属性,如大小、重量、颜色、腐烂时间等。

EN

回答 1

Software Engineering用户

发布于 2010-09-10 11:03:56

我的第一印象是,您的设计需要一些重构才能更面向对象。对于不同的结构,您有不同的类型,但是行为是很重要的。如果它是可能的,而不是创造新的水果类型,描述一般的水果结构和创建对象的具体水果。通过这种方式,您可以包含描述果树中的结构的行为,并创建泛型转换类,这些类只需使用有关结构的信息来创建添加新水果类型时所需的8个对象。这也可以使用元编程来完成,但这取决于您的语言、技能和创建这样的东西所需的精力。

因此,我们的想法是将Coconut.getMilk()和Pear.getSeeds()转换为Fruit.getAttributes()等等。这个有帮助吗?

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/135025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档