问题标签 [decoupling]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 数据类应该跨层和应用程序重用还是映射到特定于层的类?
我正在创建一个使用 WCF 服务与数据源交互的 WPF 应用程序。我为客户端和 WCF 服务器使用 DI 以确保解耦代码,但我不确定如何处理从后端到用户界面的数据传输。
为了使图层保持独立,当前通过几个映射步骤将数据从数据库传输到 UI。在服务器端,数据实体被映射到域对象,域对象又被映射到服务数据契约。在客户端,WCF 代理类映射到视图模型。
一些工作中的开发人员声称,在看似相同的类之间“复制”数据会产生维护问题,因为在引入更改时必须更新这么多类。相反,他们说您应该跨层使用共享类,因为我们同时控制客户端应用程序和 WCF 服务。我也担心所涉及的工作量并看到潜在的性能损失,但另一方面,跨层/抽象使用共享类可能会像我看到的那样创建紧密耦合。最好的方法是什么?
javascript - 如何进一步解耦这段 JavaScript 代码?
我有一个 JavaScript 对象。你可以看到这条线:
与窗口紧密耦合(如果gv
未初始化则崩溃)。但是我真正想要的是能够做的是:
但这不起作用。有什么想法我能做什么?这是完整的lisinng(紧密耦合):
还有一页...
ruby-on-rails - 防止状态耦合?
我有以下对象和关系,
商业规则
推理
问题模型
很明显,问题模型的状态现在与测试和课堂的状态相耦合。
在创建单元测试时,为了测试它,我需要设置所有这些状态,这变得非常笨拙,尤其是当业务案例变得越来越复杂时。
我怎样才能避免这种情况?
javascript - 在 DOM 中嵌入任意 JSON 的最佳实践?
我正在考虑在 DOM 中嵌入任意 JSON,如下所示:
这类似于将任意 HTML 模板存储在 DOM 中以供以后与 JavaScript 模板引擎一起使用的方式。在这种情况下,我们可以稍后检索 JSON 并解析它:
这行得通,但这是最好的方法吗?这是否违反任何最佳实践或标准?
注意:我不是在寻找将 JSON 存储在 DOM 中的替代方法,我已经确定这是解决我遇到的特定问题的最佳解决方案。我只是在寻找最好的方法来做到这一点。
c# - 我应该如何处理 ViewModel 中的查找?
我的建筑物数据库表将建筑物类型存储为代码。在单独的查找表中存储了该代码的描述。
我应该如何设计我的ViewModel
,我需要在哪里进行调用以获取相关的描述值?
我可以看到一个选项。我想知道是否有更好的选择。
那么在我看来
我的思维方式不正确吗?如果我执行上述操作,我会在我View
的服务中创建一个依赖项?
更新 1
研究提供的一些解决方案。我似乎遇到了另一个问题。我无法直接访问每个建筑物的构造函数...
objective-c - 在目标 c 中注册一个类
可以说我有classA
哪一类音频,它对音频输入进行多次采样。每次class A
得到一个新数据(秒内可能发生多次),他需要通知另一个类,即classB
.
现在,我可以创建一个 in 实例class B
并classA
在有新数据到达时调用 B,但这不是模块化软件。
我想classA
对外界“视而不见”,只是将他添加到每个项目中,并拥有另一个classB
对register
他有帮助的项目,所以当 A 有新的东西时,B 会知道它,(没有 A 呼叫 B!)
它是如何在目标 c 中正确完成的?
多谢 。
java - 快速响应的总线和 REST 服务解耦?
拥有多个公开 REST API 的后端模块,其中一个模块需要通过其 API 调用其他模块并立即响应。
一种解决方案是直接从这个“顶级”模块调用 REST API。问题是它会产生耦合,本身不支持缩放或故障转移。
一种总线(JMS、ESB)允许通过避免需要模块已知的端点来解耦模块。他们只与公共汽车“交谈”。
您将使用什么来通过总线实现快速响应(另一个限制是您没有多播,因为它可以部署在云中)?
仍然依赖 REST api 是否合理还是 JMS 侦听器会更好?我想到了 JMS、Camel、ESB。你知道使用这种架构的公司吗?
ps:例如,一个模块可能是在tomcat 实例上运行的java 战争。
jquery - 什么时候应该使用 jQuery deferred 的“then”方法,什么时候应该使用“pipe”方法?
jQueryDeferred
有两个函数可用于实现函数的异步链接:
then()
deferred.then( doneCallbacks, failCallbacks ) Returns: Deferred
doneCallbacks当 Deferred 被解析时调用的函数或函数数组。
failCallbacks当 Deferred 被拒绝时调用的函数或函数数组。
pipe()
deferred.pipe( [doneFilter] [, failFilter] ) Returns: Promise
doneFilter解析 Deferred 时调用的可选函数。
failFilter当 Deferred 被拒绝时调用的可选函数。
我知道then()
已经存在了一点时间,pipe()
所以后者必须增加一些额外的好处,但我不知道究竟有什么区别。两者都采用几乎相同的回调参数,尽管它们的名称不同,并且返回 aDeferred
和返回 a之间的差异Promise
似乎很小。
我一遍又一遍地阅读官方文档,但总是发现它们太“密集”而无法真正包裹我的头,搜索发现很多关于一个或另一个功能的讨论,但我没有找到任何真正澄清不同的东西各有优劣。
那么什么时候用比较好then
,什么时候用比较pipe
好呢?
添加
Felix 的出色回答确实有助于阐明这两个功能的不同之处。但我想知道是否有时 的功能then()
优于pipe()
.
很明显,它比前者pipe()
更强大then()
,而且似乎前者可以做后者可以做的任何事情。使用的一个原因then()
可能是它的名称反映了它作为处理相同数据的一系列函数的终止角色。
但是是否有一个用例需要返回由于返回新的而无法完成then()
的原件?Deferred
pipe()
Promise
php - 真正解耦数据库CODE
我在一个创建 Web 应用程序的项目中。用php5编写。
当我创建用户系统(登录、注册新用户和其他东西)时,我突然间到处都是数据库代码。不要误会我的意思,我使用带有单个查询功能的单例数据库类。
到目前为止,一切都很好。但是,将 SQL 查询放在哪里?我的意思是,在 Internet 上的示例中,您会看到身份验证系统中的数据库查询在两个完全不同的模块之间建立了强耦合。如果我们决定不使用 MySQL 数据库怎么办?然后,您不仅需要用连接和查询功能替换 MySQLDB 类,还需要在整个 Web 应用程序的所有部分中使用 SQL 查询。
我的解决方案是在 MySQLDB 类旁边有一个 MySQLQueryer 静态类。我保存并执行所有 SQL 查询的地方。像这个注册新用户功能:
请注意,所有哈希和盐的创建都是在用户身份验证模块(即,不是数据库模块)中完成的。
您觉得这是一个好的解决方案还是有更好的解决方案?例如,创建一个包含上述注册函数的 AuthenticationMySQLDatabaseHelper 类会更好吗?也就是说,让每个单独的模块都有自己的 MySQLDatabaseHelper 类来执行查询。
也许我让问题变得更大?
php - 如何将 $_POST/$_GET 处理代码与 html 表单/url 分离?(PHP-OOP)
在一个类中,我有一个处理方法,它根据可用的 post/get 变量执行操作。这是一个简化的示例:
所以在运行时可以像这样调用该方法$handler->handleAll($_POST)
。问题是存储在 $vars 数组中的变量必须命名为“var1”和“var2”等。这意味着处理代码与 html 表单元素的名称或获取 urls 中的变量(或者实际上是传入的任何数组)。
允许注入任何变量的数组使该方法变得灵活,这是必要的,因为它也是多态的。类继承此方法并使用它来调用它自己的操作。其结果是,从外部看,处理方法需要什么才能发挥作用并不明显。这意味着必须检查实现以找出它的作用(除非我将代码复制到 phpdoc 中,这将是愚蠢的)。
我不知道如何解决这个问题。将大量的 if/case 语句全部暴露在索引页面上(来自像这样的多个类)会导致代码非常混乱,因此最好将所有这些都封装在一个方法中。此外,将其作为类的方法来负责调用操作其自身状态的操作是有意义的(责任驱动设计)。我考虑过将每个变量作为方法的参数,但对于某些类,参数列表会非常大。这也意味着不能自动调用不同类的许多 handleAll() 方法,因为每次调用都需要显式注入所有参数,从而消除多态方面。
总而言之,我需要保持方法的多态性,但我需要某种方式将处理代码与来自 html 表单或 url 的用户输入解耦。在这样做时,也许还有一种方法可以将接口与实现分开。我很惊讶我已经找不到任何解决方案,这似乎是一个常见问题。