Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >OO:维护相关对象一致性的好方法

OO:维护相关对象一致性的好方法
EN

Stack Overflow用户
提问于 2012-09-17 23:03:28
回答 2查看 171关注 0票数 0

我有两个类,Server和Application,具有多对多关系:一个服务器可以运行多个应用程序,一个应用程序可以跨多个服务器运行。第三个类Host表示单个服务器上的单个应用程序,包括对application和server对象的引用以及应用程序在服务器上使用的磁盘空间量等附加数据。Server和Application对象都包含其所有主机的列表:因此,应用程序了解主机,主机了解应用程序,服务器了解主机,主机了解服务器。

我的项目的目的是制定出将一堆应用程序迁移到新服务器上的时间表。最初,每个应用程序都有一个迁移开始日期和迁移结束日期。一些应用程序也有虚拟化的开始和结束日期。如果迁移不能在应用程序的约束范围内执行,就会发生虚拟化(不管这些约束是什么)。它发生在迁移之前,并将应用程序从其约束中解放出来。名为'Schedule‘的对象由Application对象持有,该对象包括这4个日期以及一个布尔标志,用于说明是否要虚拟化它,以及一个’月‘列表,该列表包含在每个特定月份迁移(或虚拟化)应用程序所需的工时。

我们现在希望允许服务器在指定的日期单独进行虚拟化。这些服务器上的所有应用程序(或应用程序的一部分,即主机)将在这一天虚拟化;它们将与应用程序的其余部分一起迁移。我们最初决定让服务器类拥有自己的Schedule对象。然后在服务器中设置虚拟化日期。但是,我们决定要保持服务器和应用程序计划的一致性-例如,服务器计划的迁移开始日期和结束日期应分别设置为该服务器上运行的所有应用程序的最早开始日期和最晚结束日期。这意味着每次我们更新应用程序日期时,我们必须记住更新它的所有服务器日期(通过主机对象)。或者,如果我们想要更新特定月份的应用程序的工时,我们还必须更新服务器的工时。

然后我们考虑在每个Host对象中放置一个单独的Schedule对象。这解决了一致性问题,但导致了相当多的冗余:由于属于应用程序的所有主机对象都必须具有相同的迁移日期(但可能具有不同的虚拟化日期),因此当您为应用程序设置迁移日期时,您必须为每个主机设置相同的日期。此外,在一些情况下,我们需要计算服务器和应用程序的最早开始日期和最晚完成日期,如上所述。这将涉及:将此数据保存在每个应用程序和服务器对象中(有效地为每个应用程序和服务器对象提供自己的调度,从而带来一致性问题),或者:通过循环所有主机的调度,在每次需要时动态计算此数据。应用程序每月所需的工时也是如此,它是在应用程序级别计算的,每月分成每个主机的小时数,然后当我们需要在应用程序级别再次计算时重新计算。正如您所期望的,这是一点也不高效的。

这不是一个直截了当的问题,但我想知道是否有任何可以接受的策略来处理这种情况。为我的帖子冗长而提前道歉;希望我已经把情况说得足够清楚了。

EN

回答 2

Stack Overflow用户

发布于 2012-09-18 10:52:39

一旦我们进入第三段,这就很复杂了。

我将使用以下设计原则

  1. Keep应用程序、服务器和主机对象包含最低要求的行为和状态。

例如,应用对象可以包含开始日期、结束日期以及虚拟化开始日期和虚拟化结束日期。想一想它是否需要包含服务器列表?还是Host的实例?

  1. ,然后想一想像这样的小框架。

a)使用List执行完整迁移过程的MigrationManager

b) MigratioContext将为迁移过程合成信息。

c) ErrorContext将组合错误和异常处理

迁移管理器获取Scheduler的实例并安排迁移

通过这种方式,我们可以围绕核心业务对象和业务逻辑逐步发展出一种框架。

重要的是要记住

  1. 关注点分离。
  2. 代码的可重用性:例如,您的应用程序对象可能不需要占用整个迁移过程。相反,这些事情可以由另一个object

来完成

(这个答案是基于我的高级理解和可能是错误的假设。但我认为您可能会得到一些指导来构建应用程序以满足需求)

我再提一次建议。使用StarUML或ArgoUML等建模工具将您的想法以图形化形式呈现出来。这将帮助所有成员非常快地进入问题。

谢谢

票数 1
EN

Stack Overflow用户

发布于 2013-01-20 22:05:56

我认为面向对象编程的一个基本原则是,在可能的范围内,状态的每个可变方面在任何时候都应该只有一个定义良好的所有者(该所有者可能恰好属于一个其他实体,而该实体又被另一个实体转而拥有,等等)。其他对象和实体可能包含对该可变状态的引用,但任何此类引用都应该从所有者的角度来考虑。例如,如果一个方法接受对一个集合的引用,并且应该填充该集合,则该方法不会考虑对其拥有的集合进行操作,而是为了该实体的利益而对其他人拥有的集合进行操作。

有时,有必要让不同的对象拥有不同的副本,这些副本应该是相同的可变状态。这种情况经常出现在图形用户界面中,其中对象可能“拥有”对象的旋转角度,但显示控件可能需要在其当前方向上缓存该对象的私有呈现。在一个对象被指定为绝对主对象的情况下,这种情况的处理可以大大简化,并且它保持向其他对象通知其状态。如果有多个对象,这将非常复杂,这些对象都不具有独占所有权,但所有这些对象都应该彼此保持同步。

如果你能让你的模型不需要复制任何状态,我强烈建议你这样做。然而,至关重要的是,您的模型能够表示所有感兴趣的场景,包括两个本应处于相同状态的事物可能不是这样。最重要的是,状态的每个方面都有一个定义良好的所有权链,因此当状态的一个方面发生变化时,可以说谁的状态受到了影响。

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

https://stackoverflow.com/questions/12468252

复制
相关文章
使用jquery获取url及url参数的方法
使用jquery获取url以及使用jquery获取url参数是我们经常要用到的操作
Jensen_97
2023/07/19
1.5K0
python-获取URL中的json数据
数据源为某系统提供的URL,打开是json文件,python代码获取如下: URL替换成自己的即可。 import urllib.request def get_record(url): resp = urllib.request.urlopen(url) ele_json = json.loads(resp.read()) return ele_json if __name__ == '__main__': print(get_record('http://abc.co/
py3study
2020/01/16
5.5K0
dns url转发_获取url参数的方法
DNSPod是一款免费智能DNS产品,可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。
全栈程序员站长
2022/11/02
6.4K0
使用js获取url中的get参数并转成json格式
写在前面的 没啥说的 上代码 思路就是先获取到?后面的参数区,然后 利用字符串转数组方法获取到各个参数 var json = {}; var url = 'https://www.ba
Theone67
2019/11/21
6.3K0
js获取url参数的方法
js获取url参数的方法有很多。 1.正则分析 function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if (r != null) return unescape(r[2]); return null; } 调用方法: alert(GetQueryString("
水击三千
2018/02/27
19.7K0
封装获取url参数的方法
功能需求:前端页面来回切换需要我们去获取URL的某个参数值。这时封装一个输入参数名获取对应参数值的函数是很有必要的; //取url上的id function getQueryString(name) { //取url上的id var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if (r !
青梅煮码
2023/02/18
1.7K0
【API架构】使用 JSON API 的好处
在 API 工艺的世界里,没有比设计更受热议的领域了。从 REST、gRPC 到 GraphQL,有许多方法可以设计和标准化 Web API 交互。今天,我们将注意力转向另一种方法,JSON API,JSONAPI.org 上详细介绍的用于构建 API 的规范。
架构师研究会
2022/05/29
2.8K0
图片url地址的生成获取方法
在写博客插入图片时,许多时候需要提供图片的url地址。作为菜鸡的我,自然是一脸懵逼。那么什么是所谓的url地址呢?又该如何获取图片的url地址呢?
全栈程序员站长
2022/11/08
15.9K0
图片url地址的生成获取方法
封装方法,获取url地址上的参数
https://jiangsihan.cn/?id=123&name=hhh getQueryVariable(variable) { var query = window
江一铭
2022/06/17
1.4K0
封装方法,获取url地址上的参数
php – 通过curl从url获取JSON数据「建议收藏」
我试图通过curl连接从URL获取JSON数据.当我打开链接时:它显示{“version”:“N / A”,“success”:true,“status”:true}. 现在,我希望获得以上内容.
全栈程序员站长
2022/07/11
4K0
javascript/jquery获取地址栏url参数的方法
1、jquery获取url window.location.href; 2.通过javascript是如何获取url中的某个参数 function getUrlParam(name) { var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象 var r = window.location.search.substr(1).match(reg); //匹配目标参数 if (r!=null) return unes
Yiiven
2022/12/15
1.9K0
[转载]javascript/jquery获取地址栏url参数的方法
本篇文章主要是对javascript/jquery获取地址栏url参数的方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
小小鱼儿小小林
2020/06/24
3.5K0
如何使用 Go 语言获取 URL?
在 Web 开发和网络爬虫等领域,经常需要获取和处理 URL(统一资源定位符)。Go 语言提供了丰富的标准库来处理 URL,使得获取和解析 URL 变得简单而高效。本文将介绍如何使用 Go 语言获取 URL 的详细步骤,并提供一些实用的示例。
网络技术联盟站
2023/07/03
7810
如何使用 Go 语言获取 URL?
WordPress 获取当前页面 URL 地址的方法
通过 WordPress 原生的函数来,或者自定义函数,都可以获取当前页面的 URL 地址。
Yangsh888
2022/03/24
1.2K0
WordPress 获取 URL 链接路径的几种方法
其实对于 WordPress 开发方面来讲使用 ID 是最为方便快捷的,但是如果在 WordPress 固定链接中也使用文章 ID 等方式来展现虽然足够简单,却也失去了更加漂亮的 URL 以及关键词优化,所以最近子凡在开发百度小程序时需要充分的使用到百度智能小程序的自然搜索功能,需要提交 URL 适配规则,那么对于网站 URL 并不是 ID 的情况来说,小程序如果使用 ID 传参,这个适配规则基本就不在一个空间了。
张子凡
2022/11/02
1.2K0
WordPress 获取 URL 链接路径的几种方法
Akismet插件获取key API的方法
作者:matrix 被围观: 2,308 次 发布时间:2011-09-25 分类:Wordpress 兼容并蓄 | 2 条评论 »
HHTjim 部落格
2022/09/26
6850
Akismet插件获取key API的方法
Python - 使用 Tinyurl API 的 URL 缩短器
在网络时代,简洁的链接对于通过社交网站、短信和其他通信方式分发超链接至关重要。但是,冗长的 URL 可能会在共享时带来挑战,并且在发送消息时可能会被截断。长 URL 通常难以记忆,并且输入起来可能非常笨拙。为了解决手头的问题,创建了诸如TinyURL之类的网址缩短平台来管理职责。Python 提供了一种方便的方法来连接这些选项。在这篇文章中,我们将编写一个Python代码来与TinyURL网站API系统互动。
很酷的站长
2023/08/11
4310
Python - 使用 Tinyurl API 的 URL 缩短器
Vue获取url网址参数的两种方法
2、如果路由中没有传参(https://w3h5.com/detail),会报错页面无法显示。正常链接应该为 https://w3h5.com/detail/234
德顺
2020/04/26
31K1
点击加载更多

相似问题

友好的配置文件URL与控制器混在一起

25

空手道摘要报告在升级到1.0.0后没有显示所有经过测试的特性

12

如何从另一个空手道特性文件中调用依赖JAR中的空手道特性?

10

黄瓜报告中称为特性/场景的空手道显示标题

10

空手道:从被调用的特性文件中处理soap响应

111
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文