如何Iterator以强大的方式模拟实现接口的类的依赖项?
我们正在考虑将依赖注入容器集成到我们的项目中.我看过的每个DIC都使用关联数组和/或魔术方法.例如,这是来自Pimple页面的示例:
$container['session_storage'] = function ($c) {
return new $c['session_storage_class']($c['cookie_name']);
};
$container['session'] = function ($c) {
return new Session($c['session_storage']);
};
Run Code Online (Sandbox Code Playgroud)
是否有一个原因?我讨厌在我的代码中使用字符串,而不是将在某处显示的文字字符串.你失去了IDE的强大功能(这使代码难以维护,这是我们试图避免的事情!).
我的偏好更像是:
class Container {
function getSessionStorage()
{
return new $this->getSessionStorageClass($this->getCookieName);
}
function getSession()
{
return new Session($this->getSessionStorage());
}
}
Run Code Online (Sandbox Code Playgroud)
有没有理由不这样做?如果我们走这条路线,我是否会错过一些不会起作用的疙瘩?
我试图想出一个脚本,它将以编程方式运行图像并告诉我它的主要颜色.
目前,脚本获取每个像素的RGB值.将它们与预定义规则进行比较,并尝试计算每种颜色的像素数.
我的问题是剧本有点受打击.有没有人知道更好的方法(可能使用更容易翻译成英语的不同颜色编码系统)或通过RGB定义颜色的现有规则集?
<?php
$file = "8629.jpg";
$colors = array("Red" => array("rel" => true, "r" => 0.65, "g" => 0.09, "b" => 0.25, "var" => 0.3),
"Blue" => array("rel" => true, "r" => 0.21, "g" => 0.32, "b" => 0.46, "var" => 0.3),
"Green" => array("rel" => true, "r" => 0, "g" => 0.67,"b" => 0.33, "var" => 0.3),
"Black" => array("rel" => false, "r" => 0, "g" => 0,"b" => 0, "var" => 30),
"White" => array("rel" => false, …Run Code Online (Sandbox Code Playgroud) 我正在为我正在开发的API创建一个错误管理器.这个想法是它提供了一个可以从API返回的错误代码存储,确保以相同的方式处理不同调用中的相同错误(例如,请求中缺少所需的值).
我最初的方法是:
$this->_errorManager->setError(ErrorCodes::REQUIRED_FIELD);
Run Code Online (Sandbox Code Playgroud)
但是,这会在我想要设置错误的任何地方创建对错误代码类的依赖.
替代方案是:
$this->_errorManager->setError(100);
Run Code Online (Sandbox Code Playgroud)
但是现在我的代码中间有一个数字,但没有任何意义.
虽然我可以想到这个特定问题的解决方案,但是在其他情况下我会想要使用"枚举"而我想不出一个没有紧密结合类的解决方案.
有没有更好的方法来做到这一点或采取不同的方法来消除魔数?或者是我必须接受并根据具体情况考虑的紧密耦合?
我们即将开始研究新的Web应用程序.我们几乎100%的开发将在Typescript而不是Javascript中完成.
我已经开始研究对应用程序有意义的框架/代码结构.显然,大多数这些框架都是用Javascript编写的.我担心这些框架的设计考虑到了Javascript的局限性,而不是强类型模块化的Typescript(例如Backbone的事件是字符串名称).
这些框架是否仍然值得用于它们带来的结构/实用程序?我们是否最终要努力使Javascript框架以Typescript方式运行?
我们正在尝试在Flow中进行类型细化,以防止在外部接口上进入应用程序的值.要做到这一点,我们正在使用mixed然后尝试改进已知类型,但Flow并不容易!
以下似乎应该可以工作,我已经验证了mixed类型值与类型的要求相匹配response.
type Response = { head: string }
const refineToResponse = (value: mixed): ?Response => {
if (value
&& typeof value === "object"
&& typeof value.head === "string") {
return value;
}
return null;
};
Run Code Online (Sandbox Code Playgroud)
但我只是得到一个非常无益的错误消息:
Run Code Online (Sandbox Code Playgroud)16: return value; ^^^^^ object. This type is incompatible with the expected return type of 11: const refineToResponse = (value: mixed): ?Response => { ^^^^^^^^ object type属性
head不兼容:Run Code Online (Sandbox Code Playgroud)11: const refineToResponse = (value: mixed): ?Response …
php ×4
javascript ×2
backbone.js ×1
colors ×1
ember.js ×1
enums ×1
flowtype ×1
frameworks ×1
iterator ×1
mocking ×1
phpunit ×1
typescript ×1