我有一个叫做的动作yearly_csv.在这个动作中,我执行两个操作,如需求和供应.
def yearly_csv
if demand == 'true'
demand_csv
else
supply_csv
end
end
Run Code Online (Sandbox Code Playgroud)
我在视图中有两个单选按钮来选择其中一个操作.现在我想在RSpec中单独测试每个操作.例如,一个供应规格和另一个需求规格.我的问题是如何将单选按钮值传递给yearly_csv动作(get)?
我做了一些谷歌搜索,是的,我知道有关这两者之间的差异的问题之前已经在stackoverflow和整个网络上被问过.但我主要找到措辞有问题的答案,这可能令人困惑.
我的问题是,如果有人在这里可以为我提供两个中介和观察者模式的视觉示例,可以清楚地展示两者之间的差异.在Javascript中.谢谢!
我有以下代码段:
class Product
after_commit :do_something, on: %i(update create)
def do_something
if # update
...
else # create
...
end
end
end
Run Code Online (Sandbox Code Playgroud)
如何知道在此提交后触发了什么事件?
提交之后请不要告诉我有2个:
after_commit :do_something_on_update, on: :update
after_commit :do_something_on_create, on: :create
Run Code Online (Sandbox Code Playgroud) ruby activerecord ruby-on-rails ruby-on-rails-4 rails-activerecord
我是TeamCity的新手.我正在使用Visual Studio解决方案文件构建步骤.我想配置工件路径,以便我可以在Artifact文件夹中的某处获取我的编译输出.我从TeamCity文档中无法理解:)
我有以下配置.但没有得到任何神器.
Artifact paths:- /MyProject/bin/Release/*.* => PublishDir
Build Runner : Visual Studio(sln)
Build file path: \Successor\Successor.sln
Targets: Rebuild
Configuration: Release
Platform: x86
Run Code Online (Sandbox Code Playgroud)
这里有什么不对?
谢谢
我有一个关于我想在我的应用程序中实现的中介模式的问题(使用C#).在我的代码中实现模式时,我遇到了循环依赖.类的结构如下:
Mediator和Colleague组件/类在不同的程序集中,并且作为中介模式需要两个组件(类)相互使用.在引用彼此时出现问题.
请考虑以下代码:
namespace Mediator
{
public abstract class IMediator
{
public IColleague colleague{get;set;}
void Register();
void Send();
}
public class MediatorA:IMediator
{
void Register(){//code here}
void Send(){//code here}
}
}
Run Code Online (Sandbox Code Playgroud)
namespace Colleague
{
public abstract class IColleague
{
IMediator mediator;
void Send();
void Recieve();
}
public class ColleagueA:IColleague
{
void Send(){//code here}
void Recieve(){//code here}
}
}
Run Code Online (Sandbox Code Playgroud)
由于Mediater和同事在不同的命名空间和程序集中,如何解决循环依赖?
我们正在使用CQRS + ES.ES是NEventStore(通常是JOliver EventStore).我们在不同的命令中有2个聚合.第二AR的投影取决于读模型中第一AR投影所写的数据.问题是,当我们运行软件时,一切都变得如此之快,以至于有时两个聚合在事件存储中保持相同的日期时间(列CommitStamp).重播事件时,我们从CommitStamp列开始按顺序获取事件.但是如果两个流具有相同的CommitStamp并且采用错误的顺序,则读取模型预测会出现异常.
知道如何解决这个问题吗?
===============================
以下是关于github https://github.com/NEventStore/NEventStore/issues/170此问题的讨论
===============================
编辑:这是我们目前重播事件的方式.我搜索了GetFrom(...)如何工作,结果发现commitstamp列不用于排序.毕竟没有提交订单.因此,如果我开始重播事件,它可能会从今天返回事件,接下来是2年前记录的事件,下一个等等
public void ReplayEvents(Action<List<UncommittedEvent>> whatToDoWithEvents, DateTime loadEventsAfterDate)
{
var eventPortion = store.Advanced.GetFrom(loadEventsAfterDate);
var uncommitedEventStream = new UncommittedEventStream();
foreach (var commit in eventPortion)
{
foreach (var eventMessage in commit.Events.ToList()))
{
uncommitedEventStream.Append(new UncommittedEvent(eventMessage.Body));
}
}
whatToDoWithEvents(uncommitedEventStream.ToList());
}
Run Code Online (Sandbox Code Playgroud) 我已经看过两种方式的例子,特别是维基百科显示了访问对象决定访问顺序的一个例子,我认为这是一种听起来很好的方法.
我处于这种情况,我需要几个访问订单,所以让访客决定访问订单似乎是合理的.但是,如果访问者负责访问顺序(即,用于调用被访问对象的accept方法),我可以让访问者直接调用一些访问方法(即,绕过访问对象的accept方法的调用)和这似乎与模式提出的完全相反.
在我们有多个不同的访问订单时,实施访问模式以及如何处理的正确方法是什么?
我目前有4种类型的用户,我们预测将来至少还有3种.现在它们是:
在不久的将来,我将不得不让两位员工同时成为客户.我也有支持中心和记者.
创建.创建.创建.我并不担心访问控制,权限等...我现在的代码可以在这方面做奇迹.我的问题只是关于创造.似乎抽象工厂对我来说可能是一个,但事实是所有那些"抽象教程"教学设计模式使用书籍和汽车只是没有帮助我把它带到我的情况.要么我的设计模式错误,要么我不理解它.
在UserFactory类中,我们可以看到问题的根源:abstract public function signUp();.这是不好的做法,甚至导致PHP 5.4+上的严格标准错误不尊重方法签名.在Java中,我会有方法重载来解决这个问题.在PHP中,方法重载的工作方式不同,不允许我以这种方式工作.
<?php
abstract class UserFactory {
const ADMIN = 'AdminRecord';
const MANAGER = 'ManagerRecord';
const SALESMAN = 'SalesmanRecord';
const CUSTOMER = 'CustomerRecord';
public static function manufacture($type) {
return new $type;
}
protected $accountController;
protected $emailController;
protected $toolMailer;
function __construct() {
$this->accountController = new AccountController();
$this->emailController = new EmailController();
$this->toolMailer = new ToolMailer();
}
abstract public function signUp();
}
Run Code Online (Sandbox Code Playgroud)
这是我的第一个用例:创建一个新的管理员.
class AdminRecord extends UserFactory { …Run Code Online (Sandbox Code Playgroud) 我正在开发一个严重依赖Joda-Money的应用程序,并且有许多单元测试来验证我的业务逻辑.对我来说,一个(不可否认的是次要的)关键点是用什么样的Money/ BigMoney对象进行测试; 具体来说,CurrencyUnit使用什么.
在我看来,我有几个选择:
只是用 USD
这显然是最简单的方法,我的大多数实际应用都将使用美元,因此它有一定的意义.另一方面,它感觉相当以美国为中心,我担心它会冒险让特定货币的错误不受控制.
使用另一种真实货币,比如 CAD
这会捕获错误的硬编码USD,但除此之外并没有比使用更好USD.
使用专用的"假"货币,即XTS
毕竟,这显然XTS是"保留用于测试".但Joda将伪货币表示为带-1小数位的货币.实际上,Joda-Money中货币之间的主要区别是小数位数,因此这可能会掩盖涉及小数位精度的任何错误,例如错误地舍入为整数值.
注册我自己的自定义货币 CurrencyUnit.registerCurrency()
这显然有效,但看起来有点奇怪,因为有其他选择.
使用CurrencyUnit由模拟库创建的实例
与注册自定义货币几乎相同.
再次,这显然是一个小问题,但我很好奇是否有这样的案例的标准做法,或者是否有明确的理由特别喜欢这些选项之一.
我已经实现了一个网络钩子。调用者提供共享秘密。它们连接请求 URL 和正文,使用密钥对其进行签名,并在标头中提供签名。为了验证签名,我需要重复该过程并将我获得的签名与调用者获得的签名进行比较。
我正在使用 Django REST 框架。我正在检查自定义中的签名Authentication。框架以请求作为参数来调用Authentication的方法。authenticate我可以从 获取请求正文request.stream.read()。但是,这会消耗流,从而阻止框架为我解析它:当框架调用视图时,请求没有data像通常那样的属性。
request.stream不允许我这样做seek(0)。该请求不允许我用倒带流(例如StringIO. 我当前的解决方法是将主体存储在视图中request.auth并自己在视图中解析它,这有效但很丑陋。
有没有办法在 中安全地访问请求正文Authentication?
这是有效的版本:
在myapp/authentications.py:
import hmac
from hashlib import sha1
from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed
class WebhookAuthentication(BaseAuthentication):
def authenticate(self, request):
actual_signature = request.META['X-Vendor-Signature']
body, expected_signature = self.expected_signature(request)
if actual_signature != expected_signature:
raise AuthenticationFailed("Request X-Vendor-Signature did not match expected signature")
return None, body # Hack: preserve the …Run Code Online (Sandbox Code Playgroud) mediator ×2
ruby ×2
activerecord ×1
c# ×1
capybara ×1
cqrs ×1
django ×1
java ×1
javascript ×1
joda-money ×1
neventstore ×1
php ×1
python ×1
python-2.7 ×1
rspec ×1
rspec-rails ×1
teamcity ×1
unit-testing ×1
visitor ×1