设计模式或代码味道,功能分解导致的非规范化数据

2023-12-19

我是以下的忠实粉丝http://highscalability.com/ http://highscalability.com/并且一直在我当前的开发中沿着功能边界分解我的应用程序,作为能够扩展服务器端(特别是数据库层)的途径。这涉及到将应用程序的不同功能组件(我们有几个客户可以使用的独立模块)实现为服务器上自己的独立应用程序,联系服务器的客户端知道它需要联系不同的数据的不同服务,因此向用户呈现统一的视图。 当不同组件中的数据之间存在链接时,即一个组件保存所有用户数据,但另一个组件需要将用户引用为某条数据的所有者时,就会出现问题。我目前通过保存链接每一侧的主键信息来做到这一点(就像它们都位于单个数据库中一样),但是此链接表需要存在于两个组件中,以允许在无论哪个方向,即“获取特定用户拥有的东西”和“获取该特定东西的所有者”都将使用不同的组件。另一种方法是将链接数据仅存储在其中一个组件中,但反向查找将需要 2 次调用,而不是 1 次。

我的问题是,这些链接表的重复是否是我应该避免的某种代码味道,或者这就是当您沿着这样的功能线拆分应用程序时的情况?


功能分解是一种糟糕的设计策略。

考虑尝试使用功能分解来构建厨房搅拌机。为了搅打、混合、搅拌和混合,你需要四个碗、四个电机、四个刀片、四个开关、四个电源和四个底座来容纳每个“功能”。

功能分解用于需求分析。它不是为了设计。

在分析过程之后,您必须进行综合过程来组装公共组件、公共框架元素和公共数据模型。您最终应该得到一个支持多种功能的数据模型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设计模式或代码味道,功能分解导致的非规范化数据 的相关文章

  • 如何在Java中实现复合模式?

    我想实现一个复合模式Java以便绘制软件开发组织图 因此 我们假设有多个项目经理和多个开发人员 每个开发人员都被分配给一位项目经理 并且每个开发人员都能够使用各种编程语言进行编码 项目经理领导开发人员并准确了解他们的工作量 我对这个设计模式
  • 如何在NodeJs中应用Java/Spring的分层架构?

    我已经尝试学习 NodeJS 有一段时间了 所有书籍和教程似乎都遵循类似的代码结构模式 例子 const express require express const app express app set view engine hbs a
  • Yegge 的原型模式示例如何处理实例变量?

    我喜欢史蒂夫 耶吉的原型模式示例 http steve yegge blogspot com 2008 10 universal design pattern html并决定快速制作一个概念验证示例 不过 我并没有真正考虑清楚 虽然它非常适
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • 在事件聚合器中混合枚举与事件类

    我最近尝试实现自己的简单事件聚合器 我从 MSDN 上的事件聚合器文章中获得了很多灵感 关于 MSDN 上的事件聚合器 我注意到一件事是事件实际上是它们自己的类 这根本不是一件坏事 然而 我只是觉得总是为每个小事件创建一个新的空类很尴尬 我
  • 池和集群之间的区别

    从最纯粹的角度来看 它们感觉像是相同的概念 两者都管理资源 节点集并控制来自外部组件或由外部组件进行的访问 通过池 您可以向池借用这些资源 节点 也可以从池中归还这些资源 节点 对于集群 您在资源 节点前面有一个负载均衡器 并且您可以向负载
  • 将 javascript 放在 header 之外有多糟糕?

    这个问题几乎已经说明了一切 我开始添加一些功能到我的周末项目 http www my clock net 对于我和几个朋友来说 这是一个小应用程序 因为我们是交换生 所以它对我们来说有点有用 但事情是这样的 我在 php 中执行此操作并使用
  • 使 Web 表单输入在各种情况下安全的正确方法是什么?

    你们都认为什么是正确的 阅读 最灵活 松散耦合 最健壮等 方法来使来自 Web 的用户输入安全地用于 Web 应用程序的各个部分 显然 我们可以为每个上下文 数据库 屏幕显示 保存在磁盘上等 使用各自的清理功能 但是是否有一些通用的 模式
  • REST API 登录模式

    我正在创建一个 REST api 严格遵循 apigee 建议 使用名词而不是动词 将 api 版本烘焙到 URL 中 每个集合有两个 api 路径 GET POST PUT DELETE 用法等 我正在开发登录系统 但不确定登录用户的正确
  • Kafka中如何同时实现分布式处理和高可用?

    我有一个由 n 个分区组成的主题 为了进行分布式处理 我创建了两个在不同机器上运行的进程 他们使用相同的 groupd id 订阅主题并分配 n 2 个线程 每个线程处理单个流 每个进程 n 2 个分区 这样我就可以实现负载分配 但现在如果
  • 如何在javascript中实现观察者模式?

    你好 我正在尝试在 JavaScript 中实现观察者模式 我的index js document ready function var ironMan new Movie ironMan setTitle IronMan ironMan
  • 根据维基百科,为什么“call super”被视为反模式? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 丰富的领域模型和 ORM

    Martin Fowler 认为贫血领域模型是一种反模式 将持久性模型作为域模型进行滚动似乎也严重偏离 因为对象关系阻抗不匹配 http en wikipedia org wiki Object Relational impedance m
  • JSON 解析器从大型 JSON 文件中逐条读取

    我有一个巨大的 JSON 文件 1GB 它基本上是以下格式的对象数组 x y p q x1 y1 p1 q1 我想解析这个文件 这样所有的数据都不会加载到内存中 基本上我想获取例如 数组中的前 1000 个对象进行内存处理 然后将接下来的
  • 带双重检查锁的单例设计模式

    假设您有以下代码 1 为什么我们使用双重检查锁 为什么单锁不够好 请提供详细的例子 2 这种实施方式的主要缺点是什么 我该如何证明呢 Thanks public sealed class SomeSingleton5 private sta
  • 委托给子组件的模式

    在我正在工作的产品中 非常基本的场景之一是类的序列化 通常 要序列化的类会在其子组件上调用序列化 例如如果有一个类 s t 班级 A B C D 那么A Pack会调用pack B C D 上的函数 由于有很多这样的类 因此必须一遍又一遍地
  • 如何在没有接口的情况下模拟多重继承?

    如何在不使用接口的情况下在 C 中模拟多重继承 我确实相信 接口能力不适用于此任务 我正在寻找更多面向 设计模式 的方式 就像 Marcus 所说 使用接口 扩展方法来制作像 mixins 这样的东西可能是你目前最好的选择 另请参阅 使用接
  • Android-使用 ViewHolder 和 AsyncTask 加载联系人-缩略图问题

    我正在创建一个自定义联系人应用程序 我使用带有 ViewHolder 设计模式的 ArrayAdapter 进行优化 由于加载缩略图需要花费大量时间 因此我使用 AsyncTask 类来加载图像 用于第一组联系人我的屏幕上 图片加载得很好
  • 用于在运行时使用附加信息增强 Java 中现有数据结构的设计模式

    我将从一个小例子开始 想象一个具有几个实体的应用程序 实体A 1 n gt 实体B 1 n gt 实体C 假设我们有一个返回 EnityC 实例列表的服务方法 在 UI 中 我们想要显示 EntityC 但也向仅与 UI 相关的实体添加一些
  • 确定一组日期的事件重复模式

    我正在寻找一种模式 算法或库 它将采用一组日期并在退出时返回重复的描述 即集合 11 01 2010 11 08 2010 11 15 2010 11 22 2010 11 29 2010 会产生类似 十一月的每个星期一 的结果 有没有人以

随机推荐

  • 使用键打印字典中的最高值[重复]

    这个问题在这里已经有答案了 我的字典是这样的 A 4 B 10 C 0 D 87 我想用它的键找到最大值 用它的键找到最小值 输出将是这样的 最大 87 键是D 分钟 0 键是C 我知道如何从字典中获取最小值和最大值 有没有办法在一个语句中
  • IDictionary 或 NameValueCollection

    我目前正在编写一个接口 允许应用程序将异常数据发送到中央存储库以用于支持目的 我对如何传递额外的上下文数据感到困惑 public interface IExceptionNotifier void Notify Exception ex N
  • 通知中的音乐播放器控制

    如何在 Android 中设置带有播放 暂停 下一个和上一个按钮的通知 我是 Android 新手 也是堆栈溢出新手 所以请耐心听我说 我设置了歌曲开始播放时的通知 如下所示 SuppressLint NewApi public void
  • MemoryError - 如何使用 Python 通过 Google Drive SDK 下载大文件

    从 Google 云端硬盘下载大文件时 我的内存不足 我假设tmp content read 1024 不起作用 但如何解决呢 谢谢 def download file service file id drive file service
  • bat文件中设置cygwin环境变量

    我需要设置几个应该在 cygwin shell 中可用的环境变量 我尝试跑步 c Program Files x86 Microsoft Visual Studio 10 0 VC bin amd64 vcvars64 bat在 bashr
  • 如何检测zstd压缩?

    我目前正在开发一个 python 应用程序 它可以与 facebook api 一起使用 众所周知 facebook热爱自己的技术 正在与zstd合作进行数据压缩 问题 facebook 要么返回带有正常 json 的未压缩响应 要么如果响
  • 如何获取sql作业中step1到step2的值

    我需要创建一个 SQL 作业 Step1 在 TaskToProcess 表中插入一行并返回 ProcessID PK 和 Identity Step2 检索生成的进程 IDstep1并将值传递给 SSIS 包并执行 SSIS 包 这在 S
  • 有没有可以在 Mono 上运行的 F# IDE?

    我在 Mac 上使用 F 我想知道 kbow 是否有任何可以在单声道 不是通用编辑器 上工作的 F IDE 似乎有一个MonoDelvelop 插件 http artwild blogspot com 2008 08 f addin for
  • 使用 _* 的 varargs 的 Scala 类型归属导致错误

    我对 Scala 可变参数有一个初步的了解 接受可变参数的方法的参数需要hint它是一个 varargs 使用 使用Scala 2 10 3 我定义了以下两个方法 scala gt def method varargs Int more S
  • Qt QCalendarWidget QSS 样式

    我知道没有人支持QCalendarWidget QSS样式 但有人知道一些更改部分颜色的解决方法1 and 2 of the QCalendarWidget 浅蓝色部分1白色部分2 Thanks 我已经检查过QCalendarWidget
  • 升级到 2021-06 (4.20.0) 后,Eclipse 内容辅助循环失败

    有人问了类似的问题here https stackoverflow com questions 68199554 content assist cannot find proposals in loop if there is code b
  • 如何在 Delphi 中输入分数?

    我有一个应用程序将使用测量值 特别是小至 1 16 英寸 我真的想要一种方便的方式让最终用户输入包含小数部分的值 例如 3 7 16 我意识到我可以要求用户只输入十进制值 即 3 1875 但我真的想要一种更好的方法 有谁知道可以轻松输入的
  • 从 ArrayList 中删除所有出现的元素

    我在用java util ArrayList 我想删除所有出现的特定元素 List
  • 检索 Dynamics 2011 中的选项集

    我正在使用此代码来检索全局选项集 var request new RetrieveOptionSetRequest Name OptionsetNameGoesHere var retrieveOptionSetResponse Retri
  • 在 eclipse 中使用 mahout 而不使用 Maven

    我真的不想使用maven 因为它看起来很麻烦 有没有办法只下载 mahout 并在我的 eclipse 项目中使用它 我从使用 Maven 得到的只是构建路径错误和数百万条警告 我一直在寻找一种方法来做到这一点 但人们似乎一直都在使用 Ma
  • 四舍五入至小数点后两位

    Math round doubleValue 100 100 0 有没有更好的方法将小数四舍五入到小数点后两位 如果您对小数位以及精确的小数值感兴趣 您通常应该使用java math BigDecimal http download ora
  • Zend 实例随机丢失

    我有一个在 zend 上运行的网站 最近它表示登录时会丢失会话变量 auth Zend Auth getInstance 有时似乎不起作用任何线索可能是什么问题 None
  • Realm 中具有惰性属性的复合键

    我发现了在 Swift 中使用带有复合主键的 Realm 的绝佳解决方案 https github com realm realm cocoa issues 1192 https github com realm realm cocoa i
  • 构建过程中ASP.NET Core设置托管环境

    我有一个ASP NET Core Api我在其中使用 appsettings environmentname json 配置文件 然后 我还有带有不同环境选项的相应 launchSettings json 文件 以便我可以使用任何特定的环境
  • 设计模式或代码味道,功能分解导致的非规范化数据

    我是以下的忠实粉丝http highscalability com http highscalability com 并且一直在我当前的开发中沿着功能边界分解我的应用程序 作为能够扩展服务器端 特别是数据库层 的途径 这涉及到将应用程序的不