据我所知,CQRS的基本原则之一是命令应该是以行为为中心的,并且在业务或UL中具有价值,而不是以数据为中心的,即CRUD.我们没有专注于更新客户,而是拥有像CustomerHasMoved这样的命令.如果你有CRUD屏幕可以纠正某些数据怎么办?例如,我们需要更改拼写错误的客户的名称.这在业务中并没有多大价值.这应该只是在UpdateCustomer命令的保护伞下吗?
我正在阅读有关SOLID和其他设计原则的内容.我认为ISP与"程序接口,而非实现"相同.但看起来这些是不同的原则?
有区别吗?
oop design-patterns solid-principles interface-segregation-principle
我是Mac上的RubyMine 7的新手.我曾经使用过Sublime Text 3,我喜欢RubyMine,除了缺少文件预览.
在Sublime Text中,单击侧栏(文件资源管理器)中的文件时,所选文件内容将显示在编辑器选项卡中以供临时查看.如果我选择另一个文件,则相同的选项卡将更改为新选择的文件的内容.
我一直在RubyMine或插件中搜索这个首选项设置,但我没有运气.
类似的功能是"自动滚动到源",但此功能会打开文件而不是预览文件.
如果有人知道如何在RubyMine中进行Sublime Text-like文件内容预览,我会很感激.
最近我听说OOP(Java)有9条规则.我只知道四个是抽象,多态,继承和封装.OOP还有更多规则吗?
我一直在尝试通过使用C++模板来实现访问者模式来减少代码中的样板量.到目前为止,我已经想出了这个:
class BaseVisitor {
public:
virtual ~BaseVisitor() {}
};
template<typename T>
class Visitor : public BaseVisitor {
public:
virtual void visit(T& /* visitable */) = 0;
};
template<typename Derived>
class Visitable {
public:
void accept(Visitor<Derived>& visitor) {
visitor.visit(static_cast<Derived&>(*this));
}
};
Run Code Online (Sandbox Code Playgroud)
Visitable的每个子类都如下所示:
class Mesh : public Object, public Visitable<Mesh> {};
class Text : public Object, public Visitable<Text> {};
Run Code Online (Sandbox Code Playgroud)
最后,访客看起来像这样:
class Renderer : public Visitor<Mesh>, public Visitor<Text> {}
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都很好......现在问题在于:
for(Scene::iterator it = scene.begin(); it != scene.end(); ++it) {
Object& object = static_cast<Object&>(*it); …Run Code Online (Sandbox Code Playgroud) 我需要在ASP MVC项目的构建过程中从TC的工件中排除一些文件.这些文件包含web.debug.config文件,但也有其他文件.
目前,TC中的工件路径设置如下所示:
src/Project.Web/*.config => arch.zip
我需要以某种方式告诉它跳过web.debug.config文件.我试过这个并不起作用:
src/Project.Web/*.config => arch.zip
-src/Project.Web/*.debug.config
所以,理想情况下,我不希望在构建期间创建的arch.zip中的这些文件.
我被一位同事质疑我在ASP.net客户端应用程序中实现WCF Windows服务的设计模式,我真的不知道它是Bridge还是Adapter!
这是实施:
我一直认为它是适配器模式的实现,但实际上我不知道为什么它不是Bridge!
我已经阅读了SO,GoF和维基百科中的所有帖子,但它确实没有意义!
根据我的理解,两种模式都指向一个现有的类型,都将抽象与其实现分离,我错过了一个观点?
这是来自GoF:
这些模式之间的关键区别在于它们的意图.Adapter专注于解决两个现有接口之间的不兼容问题.它没有关注这些接口的实现方式,也没有考虑它们如何独立发展.这是一种让两个独立设计的类一起工作而不重新实现其中一个的方法.另一方面,Bridge桥接了一个抽象及其(可能很多)实现.它为客户提供了一个稳定的界面,因为它允许您改变实现它的类.随着系统的发展,它还适应新的实现.
我不完全理解上述说法,
更新:
再次来自GoF:
请记住,适配器使两个现有接口协同工作,而不是定义一个全新的接口.
是否意味着更改现有接口以便它可以与另一个接口一起使用是Adapter的实现?
UPDATE2:
刚刚发现这篇令人难以置信的文章:C#中的插图GOF设计模式
这是真正的Bridge Patter结构:
我错过了Bridge模式允许您组合不同的抽象和实现并独立扩展它
的事实
我对Rails/RSpec/Capybara有点新意,所以这可能是一个新手问题,但谷歌并没有像我希望的那样多.我希望我可以使用
it { should have_link('link text', href: 'url', target: '_blank') }
Run Code Online (Sandbox Code Playgroud)
为应该在新窗口中打开的链接编写测试,但这似乎不起作用.我也尝试用大括号包装选项哈希:
it { should have_link('link text', {href: 'url', target: '_blank'}) }
Run Code Online (Sandbox Code Playgroud)
无论实际页面和正在测试的链接中是否存在目标属性,测试都将始终成功.更改href属性确实会导致测试失败.我认为has_link的选项哈希是要测试的属性列表.显然我错了,但是测试单个链接的目标属性的最佳方法是什么?希望不要使用XPath搜索...
试图测试该页面包含<title>My Title</title>:
# spec/features/reports_spec.rb
require 'spec_helper'
feature "Archive Management" do
subject { page }
describe "Index Page" do
before(:all) { 10.times { FactoryGirl.create(:randomreport) } }
after(:all) { Report.delete_all }
describe "when no search terms present" do
before { visit reports_path }
it { should have_selector('title', text: 'My Title') } # <= Fails w/Capybara 2.0
it { should have_selector('title') } # <= passes
it { should have_text('My Title') } # <= passes
it { should have_selector('h2', text: "Welcome") } …Run Code Online (Sandbox Code Playgroud)