- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在使用 SOA,我有一堆服务(ArticleService、CommentService、UserService 等)
我还有一个从 XML 配置文件填充的 ConfigurationService。
我正在使用 Zend 框架。
我的一些服务需要这个配置服务,我正在使用依赖注入(inject),在我的大多数服务的构造函数中添加 ConfigurationService 以便能够获取全局配置,这是一个好习惯吗?
感谢您的反馈。
最佳答案
我会说,不,不要在其他服务的构造函数中传递配置容器——既不是作为服务,也不是作为数组,也不是 Zend_Config
实例。我会保持对那些服务的注入(inject)(无论是通过构造函数还是通过 setter)专注于他们实际需要的实际对象/协作者/数据。
因此,例如,ArticleService
可能依赖于 ArticleRepository
接口(interface)/对象、ArticleMapper
或数据库适配器。让 ArticleService
的构造函数/setter 签名反射(reflect)它真正需要的东西。
相反,我会做的是在 Bootstrap
期间,创建某种工厂对象 - 也许作为应用程序资源 - 在其构造函数中接受您的配置数据/对象/服务(或者更好, bootstrap 实例本身,您不仅可以从中获取配置数据,还可以获取在 bootstrap 过程中创建的任何应用程序资源,例如数据库适配器)。然后在您的工厂对象上编写方法来创建/提供您需要的其他服务。在内部,工厂维护已创建服务的注册表,以便它可以在需要时延迟创建实例。
我的想法可能如下所示:
Bootstrap 片段:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initFactory()
{
$factory = new My_Factory($this);
return $factory;
}
}
然后是工厂:
class My_Factory
{
protected $_registry;
protected $_bootstrap;
public function __constructor($bootstrap)
{
$this->_bootstrap = $bootstrap;
}
public function getDbAdapter()
{
if (!isset($this->_registry['dbAdapter']){
$this->_bootstrap->bootstrap('db'); // probably using app resource
$this->_registry['dbAdapter'] = $This->_bootstrap->getResource('db');
}
return $this->_registry['dbAdapter'];
}
public function getArticleService()
{
if (!isset($this->_registry['articleService']){
$dbAdapter = $this->getDbAdapter();
$this->_registry['articleService'] = new My_ArticleService($dbAdapter);
}
return $this->_registry['articleService'];
}
public function getTwitterService()
{
if (!isset($this->_registry['twitterService']){
$options = $this->_bootstrap->getOptions();
$user = $options['twitter']['user'];
$pass = $options['twitter']['pass'];
$this->_registry['twitterService'] = new My_TwitterService($user, $pass);
}
return $this->_registry['twitterService'];
}
}
然后在 Controller 中,您可以获取一个 ArticleService
实例:
class SomeController extends Zend_Controller_Action
{
protected $_factory;
public function init()
{
$this->_factory = $this->getInvokeArg('bootstrap')->getResource('factory');
}
public function someAction()
{
$articleService = $this->_factory->getArticleService();
$this->view->articles = $articleService->getRecentArticles(5); // for example
}
}
这里的结果是每个服务都明确标识了它需要的协作者,工厂是一个负责创建/注入(inject)所有这些协作者的地方。
最后,我承认我只是在这里吐口水。对我来说,这本质上是一个基本的依赖注入(inject)容器;从这个意义上说,使用功能齐全的 DIC——也许是 Symfony DIC 或 ZF2 中新的 Zend\Di
包——可能会更好。但是,在与所有最佳实践建议进行了数月的斗争以注入(inject)您的依赖项之后,这就是我想出的。如果它很愚蠢或完全错误,请(请!)纠正我。 ;-)
关于zend-framework - 如何在 SOA 中使用依赖注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6378160/
我经常听到非技术客户或项目经理把面向服务的体系结构 (SOA) 作为一个流行词四处流传,几乎不关心或不了解它的实际含义(例如:“我可以购买 SOA 吗?”)。还有很多关于 SOA 的错误信息(例如:“
一些 SOA 基础是: 松耦合 可重用性 无状态服务 服务之间的正式契约(Contract) 粗粒度 异步 抽象底层逻辑(黑盒) 可组合(作为构建块的服务) 可发现服务 自治服务 它们中的大多数都可以
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 去年关闭。 Improve th
我是一名学生,我有一篇名为“网格计算”的学期论文和另一篇名为“SOA”的论文。 作为实验室练习的一部分,我创建了基于 SOA 的 Web 服务。但似乎网格计算处理相同的基于 WSDL 的服务。我实际上
它们有许多共同的特征。但是有什么区别呢? MOM 允许异步,而 SOA 不允许,这是唯一的区别吗? 最佳答案 SOA,即面向服务的体系结构,是一种体系结构,它定义了如何在不同应用程序之间构建对业务信息
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
所以我今天的开放式潜在主观问题是; 如果您有机会在今天的 Microsoft 技术上构建 SOA;你会从下面的选项中选择什么? WCF、WF + AppFabric BizTalk + ESB 工具包
Web 服务是一种面向服务的架构实现。 但是,我们能说 CORBA、RMI 和 Java EE 平台也是 SOA 的实现吗? 最佳答案 如果您说 SOA 意味着 WS-* 标准,那么答案是否定的。 但
我对这些 Web 服务术语 SOA、ESB 感到困惑。 任何人请解释。 最佳答案 SOA 是一种架构方法,您可以在其中以粗粒度的方式公开和封装“服务”。它没有规定任何技术机制或实现。 SOA更多地与系
关闭。这个问题需要多问focused 。目前不接受答案。 已关闭10 年前。 已锁定。这个问题及其答案是locked因为这个问题是题外话,但却具有历史意义。目前不接受新的答案或互动。 有人可以用简单的
“服务代理”在 SOA 模型架构中的作用是什么? 最佳答案 服务代理旨在成为服务的注册表,并存储有关哪些服务可用以及谁可以使用它们的信息。例如,最初设想为 Web 服务注册中心的 UDDI 现在被视为
我在网上看过,但我对包装器服务是包装遗留应用程序还是一组复杂服务感到困惑。 更新:从我收到的答案来看,SOA 中没有公认的“包装服务”定义,经过进一步调查,我意识到“包装服务”取决于定义它的人。我的意
我对 SOA 中编排的含义感到困惑,我阅读了很多定义但没有明白这个想法,你能帮我吗? 最佳答案 有两种主要方法可以从更大的类(class)粒度服务、编排和编排中执行所有必要的细粒度服务。 对于管弦乐队
我一直在研究异步消息传递,我喜欢它优雅地处理某些领域中的一些问题的方式,以及它如何使领域概念更加明确。但对于一般的领域驱动开发(至少在服务/应用程序/ Controller 层)来说,它是一种可行的模
我创建了一个名为 QM_MQ_TEST 的队列管理器 crtmqm QM_MQ_TEST strmqm QM_MQ_TEST runmqsc QM_MQ_TEST DEFINE CHANNEL(QM
我在 Weblogic 10.3.6 中有一个包含 SOA 服务器的域。我刚刚使用 JDeveloper 部署了一个名为 soa_1 的 SOA 应用程序以及名为 HelloWorld 的 BPEL
任何机构都在他们的商店中使用 Talend SOA Suite。 如果我没记错的话,它与 Oracle SOA Suite 和 Service Bus 相比如何,因为这两个产品都实现了 EIP 模式?
我最近开始了一个副项目。它应该是一本虚拟食谱书,具有存储和检索食谱 (CRUD)、对它们进行评分和搜索的功能。这不是什么新鲜事,但我想将它构建为桌面应用程序,以了解有关数据库、单元测试、UI 等的更多
什么时候分布式事务在面向服务的架构中有意义? 最佳答案 分布式事务在 SOA 环境中经常使用。如果您有一个调用多个服务的复合服务,则底层服务调用应作为单个事务处理。业务流程应允许其步骤回滚。如果底层资
我正在阅读有关SOA原理和模式的信息,但我无法理解什么是不可知论的服务。您对此有任何直接的定义吗?概念和用法是什么? 最佳答案 可以在Agnostic/non-agnostic revisited中找
我是一名优秀的程序员,十分优秀!