小编Dav*_*uth的帖子

CQRS和CRUD屏幕

据我所知,CQRS的基本原则之一是命令应该是以行为为中心的,并且在业务或UL中具有价值,而不是以数据为中心的,即CRUD.我们没有专注于更新客户,而是拥有像CustomerHasMoved这样的命令.如果你有CRUD屏幕可以纠正某些数据怎么办?例如,我们需要更改拼写错误的客户的名称.这在业务中并没有多大价值.这应该只是在UpdateCustomer命令的保护伞下吗?

domain-driven-design cqrs

21
推荐指数
2
解决办法
5567
查看次数

接口隔离原理 - 编程到接口

我正在阅读有关SOLID和其他设计原则的内容.我认为ISP与"程序接口,而非实现"相同.但看起来这些是不同的原则?

有区别吗?

oop design-patterns solid-principles interface-segregation-principle

21
推荐指数
3
解决办法
5744
查看次数

在RubyMine中,如何通过在Sublime Text中选择它来预览文件的内容?

我是Mac上的RubyMine 7的新手.我曾经使用过Sublime Text 3,我喜欢RubyMine,除了缺少文件预览.

在Sublime Text中,单击侧栏(文件资源管理器)中的文件时,所选文件内容将显示在编辑器选项卡中以供临时查看.如果我选择另一个文件,则相同的选项卡将更改为新选择的文件的内容.

我一直在RubyMine或插件中搜索这个首选项设置,但我没有运气.

类似的功能是"自动滚动到源",但此功能会打开文件而不是预览文件.

如果有人知道如何在RubyMine中进行Sublime Text-like文件内容预览,我会很感激.

rubymine

21
推荐指数
1
解决办法
377
查看次数

OOP有什么规则吗?

最近我听说OOP(Java)有9条规则.我只知道四个是抽象,多态,继承和封装.OOP还有更多规则吗?

oop rules solid-principles package-design

20
推荐指数
3
解决办法
8448
查看次数

使用C++模板实现访问者模式

我一直在尝试通过使用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)

c++ templates visitor

20
推荐指数
2
解决办法
1万
查看次数

从Team City工件中排除文件

我需要在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中的这些文件.

teamcity

20
推荐指数
2
解决办法
7465
查看次数

在"现实世界"中使用单一责任原则

我基本上想要了解那些认为在现实世界代码中使用单一责任原则合理的人的百分比以及实际执行的数量.在播客#38中 Joel谈到了这个OOP原则是如何无用的真实世界; 而且这表明,像鲍勃叔叔这样的人可能没有写过非平凡的系统.

我个人在一些软件项目中写过或发挥过重要作用,但现在才在我年轻的职业生涯中遇到过这种模式.我喜欢这个原则的声音,并且真的想开始使用它.我发现Joel在播客中的论点相当薄弱(如果你继续阅读这里的博客评论那么其他人也是如此).但是,它有什么道理吗?

社区的想法是什么?

oop single-responsibility-principle solid-principles

19
推荐指数
3
解决办法
2714
查看次数

桥与适配器设计模式

我被一位同事质疑我在ASP.net客户端应用程序中实现WCF Windows服务的设计模式,我真的不知道它是Bridge还是Adapter!

这是实施:

  • 我已经获得了服务合同
  • 定义了一个类似于我的WCF数据协定的新界面
  • 我创建了一个WCF客户端并将其包装在新接口中
  • 将新的接口操作映射到原始WCF客户端(我在这里做一些日志记录/错误处理)

我一直认为它是适配器模式的实现,但实际上我不知道为什么它不是Bridge!

我已经阅读了SO,GoF和维基百科中的所有帖子,但它确实没有意义!

根据我的理解,两种模式都指向一个现有的类型,都将抽象与其实现分离,我错过了一个观点?

这是来自GoF:

这些模式之间的关键区别在于它们的意图.Adapter专注于解决两个现有接口之间的不兼容问题.它没有关注这些接口的实现方式,也没有考虑它们如何独立发展.这是一种让两个独立设计的类一起工作而不重新实现其中一个的方法.另一方面,Bridge桥接了一个抽象及其(可能很多)实现.它为客户提供了一个稳定的界面,因为它允许您改变实现它的类.随着系统的发展,它还适应新的实现.

我不完全理解上述说法,

  1. 这是否意味着如果我在设计时更改了适配器或更改了原始界面的实现,那么它是Bridge Pattern
  2. 差异听起来微不足道,在实施/排除方面还有其他差异吗?
  3. 怎么会有人说出 开发使用了什么实现?
  4. 谁能给我一个很好的桥接模式示例,以及如何在软件生命周期中对其进行更改?

更新:

再次来自GoF:

请记住,适配器使两个现有接口协同工作,而不是定义一个全新的接口.

是否意味着更改现有接口以便它可以与另一个接口一起使用是Adapter的实现?

UPDATE2:

刚刚发现这篇令人难以置信的文章:C#中的插图GOF设计模式

这是真正的Bridge Patter结构:

我错过了Bridge模式允许您组合不同的抽象和实现并独立扩展它 的事实在此输入图像描述

c# wcf design-patterns bridge adapter

19
推荐指数
3
解决办法
7723
查看次数

使用Capybara/RSpec测试链接的目标属性

我对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搜索...

rspec capybara

19
推荐指数
3
解决办法
1万
查看次数

如何使用Capybara 2.0测试页面标题?

试图测试该页面包含<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)

rspec ruby-on-rails capybara

19
推荐指数
1
解决办法
2万
查看次数