- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
如果我添加第 3 方 bundle ,请说来自 Knp bundles例如,我应该先包装它还是应该直接在我的代码中使用它?
如果我决定包装它,我将包装代码放在哪里?在单独的新 bundle 中?在我的应用程序包中?
澄清:
我不是在问如何将第三方 bundle 添加到我的项目中。
我不是在问 bundle 是什么。
这个问题旨在将第 3 方代码封装在包装类后面。由于该 bundle 是由第 3 方开发人员开发的,因此它是可能会破坏我的代码的意外更改的主题。
将第 3 方 bundle 添加到项目后如何打包?
最佳答案
这是通过 composer
包含的第 3 方 bundle 的答案在 Symfony2 中,一般来说,它并不指一个特殊的包。
首先
只要您在 1.*
中将请求的包的版本修复为稳定版本(如 composer.json
) (并且只要开发人员遵循他自己的指导方针),您应该不会遇到接口(interface)兼容性中断的任何问题,因此不需要包装。
但我假设您希望通过在包装器代码中抛出异常和/或实现回退来防止任何代码中断,以便使用包装器代码的所有内容仍然可以工作或至少显示适当的错误。
如果你想包裹
如果您想使用 dev-master
给定 3rd 方包的版本,可能会发生重大变化。但是不应该出现您真的想要包含 dev-master
的情况。当有稳定版本时。
无论如何,我看到有两种方法,如果您想包含 dev-master
,这可能是有意义的。或者想要包装它以显示错误,记录它们,捕获异常等:
构建一个使用第 3 方包的所有服务实例的服务类
此服务类可能位于使用第 3 方 bundle 的 bundle 之一中,在这种方法中不需要额外的 bundle 。
这样你就有了一个单一的服务,比如 acme.thirdparty.client
包装其他服务的单个方法调用。您需要注入(inject)您需要的所有 3rd 方服务(或创建所需子类的实例)并包装所有所需的方法调用。
# src/Acme/MyBundle/Resources/config/services.yml
parameters:
acme.thirdparty.wrapper.class: Acme\MyBundle\Service\WrapperClass
services:
acme.thirdparty.wrapper:
class: %acme.thirdparty.wrapper.class%
arguments:
someService: @somevendor.somebundle.someservice
someOtherService: @somevendor.somebundle.someotherservice
<?php
namespace Acme\MyBundle\Service;
use SomeVendor\SomeBundle\SomeService\ConcreteService;
use SomeVendor\SomeBundle\SomeService\OtherConcreteService;
class WrapperClass
{
private $someService;
private $someOtherService;
public function __construct(ConcreteService $someService, OtherConcreteService $someOtherService)
{
$this->someService = $someService;
$this->someOtherService = $someOtherService;
}
/**
* @see SomeVendor\SomeBundle\SomeService\ConcreteService::someMethod
*/
public function someMethod($foo, $bar = null)
{
// Do stuff
return $this->someService->someMethod();
}
/**
* @see SomeVendor\SomeBundle\SomeService\ConcreteOtherService::someOtherMethod
*/
public function someOtherMethod($baz)
{
// Do stuff
return $this->someOtherService->someOtherMethod();
}
}
# src/Acme/WrapperBundle/Resources/config/services.yml
parameters:
somevendor.somebundle.someservice.class: Acme\WrapperBundle\Service\WrapperClass
somevendor.somebundle.someservice.class
所有使用这个类的服务现在都是
Acme\WrapperBundle\Service\WrapperClass
的实例.这个包装类可以扩展基类:
<?php
namespace Acme\WrapperBundle\Service;
use SomeVendor\SomeBundle\SomeService\ConcreteService;
class WrapperClass extends ConcreteService
{
/**
* @see ConcreteService::someMethod
*/
public function someMethod($foo, $bar = null)
{
// Do stuff here
parent::someMethod($foo, $bar);
// And some more stuff here
}
}
<?php
namespace Acme\WrapperBundle\Service;
use SomeVendor\SomeBundle\SomeService\ConcreteServiceInterface;
use SomeVendor\SomeBundle\SomeService\ConcreteService;
class WrapperClass implements ConcreteServiceInterface
{
private $someService;
/**
* Note that this class should have the same constructor as the service.
* This could be achieved by implementing an interface
*/
public function __construct($foo, $bar)
{
$this->someService = new ConcreteService($foo, $bar);
}
/**
* @see ConcreteService::someMethod
*/
public function someMethod($foo, $bar = null)
{
// Do stuff here
$this->someService->someMethod($foo, $bar);
// And some more stuff here
}
}
ConcreteService
而不仅仅是更换它。这也忽略了依赖注入(inject)的整个想法。
SensioBuzzBundle
的
Buzz Browser
),在这种情况下,你可以使用它们而不是自己编写所有东西。
1.*
用于错误修正和新功能或
1.0.*
仅用于错误修正)是要走的路。如果没有稳定版本或者您想包含
dev-master
, 包装是一种选择。如果你想包装你的代码,构建一个额外的包是更灵活的方式,但如果没有太多的代码需要包装,一个单一的服务类就足够了。
关于php - Symfony2 中应该如何包装 3rd 方包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19810282/
我花了几个小时在 R-exts 手册和文档上parse_Rd() (以及引用文献中的 PDF 文档),但我 还没搞清楚是什么results=rd手段或如何使用它。我以为我可以 使用 R 代码片段动态创
这是对 this 的后续问题.我正在使用 为 __AVR_HAVE_LPMX__ 处理器 (avr25) 编写代码 GNU C (WinAVR 20100110) 版本 4.3.3 (avr)/由 G
我正在记录一个内部的、非导出的函数。 roxygen2 正在创建一个 Rd 文件,即使文档中没有 @export 标记。 roxygen2 为以下文档创建了一个 Rd 文件。我错过了什么? #
我正在记录一个内部的、非导出的函数。 roxygen2 正在创建一个 Rd 文件,即使文档中没有 @export 标记。 roxygen2 为以下文档创建了一个 Rd 文件。我错过了什么? #
如何正确指定 rd 文件的编码?我正在尝试将以下记录虚拟函数的帮助文件添加到我的包中: \name{dummy} \encoding{ISO-8859-2} \alias{dummy} \title{
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 3年前关闭。 Improve thi
结合试图为自己寻找解决方案 this question ,我发现自己陷入了尝试编写有效 Rd 标记的过程中。我想要的是添加一个名为 Raw Function Code 的部分并将函数的代码放在它下面。
我正在为一个函数填写一个 Rd 文件。 当我在 Details 部分使用\eqn{2^{x}} ,然后构建和安装包时,没有上标指数。 查看 R-exts.pdf,它以 Poisson.Rd 为例说明如
我在一家从事能源业务的研发公司工作。我们开发了一些成功的产品,但现在似乎所有的时间都花在解决与这些产品相关的问题上。我们似乎没有时间开发新产品。有没有人知道如何既能处理现有产品出现的问题,又能有时间和
我正在尝试将 R 文档文件(扩展名 .Rd)转换为纯文本。我知道 RdUtils 包含一个名为 Rdconv 的工具,但据我所知它只能从命令行使用。有没有办法从 R session 中访问 Rdcon
正如标题所说,我在生成 时遇到问题R 使用 打包文档roxygen2 . 我 99.9% 肯定已经按照说明准备了一切here and here已经。我知道几乎不可能得到像这样的主要远程诊断非病例的答案
我正在使用 Rstudio 简化 Sweave 和 R 进行数据分析,我将与其他分析师分享。为了使变量的编码更加清晰,最好有一个帮助文件这样他们可以调用?myData。并获得有用的文件,如果他们需要的
简短版本:我可以使用 roxygen 模拟 stats 包中 Normal 的文档吗? 长版本:我正在开发一个包,并试图通过在一个标题下收集许多具有公共(public)输入/参数的函数来使文档更具可读
我无法使用 RStudio 和 Roxygen2 为我的包生成 .Rd 文档文件。首先,我要提一下,我已经遇到了此处发布的类似问题,并且已经完成了以下操作: Roxygen2 阻止在文件开头以 #'
我正在通过 JS 调用 ipinfodb。最近我收到了大约 5-6 条回复(来自大约 600 条),将国家/地区代码指定为“RD”。 “RD”不是 ccTLD,我找不到任何理由将其退回。有没有人遇到过
我正在使用 roxygen 来记录 R 包。我在包的“man/macros”子目录中有一个宏文件 myMacro.Rd。该文件指定 \myMacro宏。 (该宏将 标记插入 HTML 帮助文件以更改
我有一个 Windows 批处理文件,它删除了 Windows 主目录中的一些目录。 REM clear Ivy cache on windows RD /s %Use
以下 MWE 无法编译(通过 devtools::document()): #' MWE #' #' @examples #' format('{}') # Works #' format('{')
.R 和 .rd 文件(文档)的名称是否需要与它所指的函数具有完全相同的名称? 例如,我能否在同一个 R 包中拥有一个名为“b”的函数和另一个名为“B”的函数,并将文档写入不同的 .R 和 .rd 文
实际问题 如何避免 Rd 文件名冲突 S4 泛型及其方法不一定全部定义在同一个包中(包含(某些)自定义方法的包取决于包含泛型的包)和 使用 roxygenize()从包装 roxygen2生成实际的
我是一名优秀的程序员,十分优秀!