让我们说我有一个复合设置如下:
public abstract class Element {
//position, size, etc.
//element methods
//setters/getters
}
public class SimpleElement1 extends Element {
//...
}
public class SimpleElement2 extends Element {
//...
}
public class CompositeElement extends Element {
protected List<Element> childrenElements;
//methods to add/remove/get children
}
Run Code Online (Sandbox Code Playgroud)
现在,我将如何将这个Composite包装到Builder模式中,这样我就可以简化客户端代码,使其不关心(或者更少关心)如何将子项链接到Composite上的复杂性?
我正确地看不到桥模式:
之前:
public class Main2 {
@SuppressWarnings("unused")
public static void main(String[] args) {
Car car11 = new BadNativeCar();
Car car12 = new GoodNativeCar();
Car car21 = new BadForeignCar();
Car car22 = new GoodForeignCar();
}
}
interface Car{
public void drive();
public void stop();
}
class NativeCar implements Car{
@Override
public void drive() {
}
@Override
public void stop() {
}
}
class ForeignCar implements Car{
@Override
public void drive() {
}
@Override
public void stop() {
}
}
class GoodNativeCar …Run Code Online (Sandbox Code Playgroud) 嗯,我正在经历这个关于"在MSDN上的优秀文章基类用途 ".虽然我理解基类和接口的概念,但我无法理解本文第二段中的模板方法的用法(" 受保护的方法和构造函数 ").
有没有人可以借助一个简单的实际例子帮助我理解这个概念?或许,理解模板方法的概念是一个很好的起点.
提前致谢.
我们有一个每晚TeamCity构建版本,它将最新代码发布到我们的测试网站,恢复数据库以匹配生产,然后应用我们在TFS中的任何模式和数据更改.如果此夜间构建失败,则网站将关闭,直到我们手动修复代码和/或数据库脚本并重新启动构建.
我想要的是自动回滚到上一次成功构建,以便尽管有任何构建中断,网站仍然可用.
花了一点时间调查后,这是我提出的解决方案:
我不知道的是如何使回滚构建获得基于标签的版本.
对此或其他解决方案的任何帮助将不胜感激.
干杯.
周末我被给了卡塔工作.在开始之前我真的只想收集一些想法.我不是在寻找解决方案,只是关于最佳方法/实践的一些想法.
从我的谈话中我似乎需要使用BDD - > ATDD(与小黄瓜场景相关) - > TDD方法.我只是想找出最好的方法.
我目前的想法是
1)创建一个specflow项目并将用户故事提炼成一个小黄瓜.
2)使用GWT语法在小黄瓜(场景)中创建相关的验收测试,从而在[binding]类中生成我的ATTD样式测试(右键单击'generate').
3)使小黄瓜ATDD测试通过.
我遇到的难题是直接链接到我的小黄瓜文件中的ATTD测试的测试并没有给我足够低水平的测试.
那我该怎么办?我是否编写了高级ATDD测试,然后在将它们传递之前,我是否深入挖掘并编写纯TDD测试来设计我的低级对象?
是的,我还没有弄清楚如何以完全BDD的方式工作(纯粹的风格),所以只是想知道我是如何挖掘的.我很欣赏你应该逐步完成并完成一个测试并通过,但我觉得我需要从高级ATDD测试开始然后更深入,所以更高级别的测试不会工作,直到我使我的低级代码工作,但要遵循TDD我需要测试那个低级代码,所以我已经打破了1单元测试的原则然后通过然后重构.....
希望有人明白如何在没有实际操作的情况下告诉我如何处理这个问题.但是这里提供给我的问题是......(我很欣赏,如果测试人员看到这一点,他们可能会因为我在这里问我而失败,但更重要的是我学到而不是得到这份工作).是的我知道我是MAD :-)
我也很想知道我是否应该为我的纯TDD测试设计一个单独的项目.什么是最好的项目结构?我正在考虑1个specflow项目和一个.test项目以及一个用于运行时的类库和控制台应用程序.
PS帮助我的人对我有所帮助.拥抱或慈善捐赠.或者只是这里的+1我猜你真正想要的是: - /
剪刀石头布
User Story Front
+--------------------------------------------------+
| |
| Title: Waste an Hour Having Fun |
| |
| As a frequent games player, |
| I'd like to play rock, paper, scissors |
| so that I can spend an hour of my day having fun |
| |
| Acceptance Criteria |
| - Can I play Player …Run Code Online (Sandbox Code Playgroud) 在jruby 1.7.3上使用capybara 2.0.2和poltergeist 1.1.0运行黄瓜1.1.9测试时,我看到如下的间歇性错误:
Scenario: Recover username for a valid email # features/user/recover_username.feature:14
Undefined method reset_id! for module '#<Module:0xac1f53d>' (NameError)
org/jruby/RubyModule.java:2284:in `undef_method'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/activemodel-3.2.13/lib/active_model/attribute_methods.rb:279:in `undefine_attribute_methods'
org/jruby/RubyArray.java:1613:in `each'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/activemodel-3.2.13/lib/active_model/attribute_methods.rb:279:in `undefine_attribute_methods'
org/jruby/RubyModule.java:2291:in `module_eval'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/activemodel-3.2.13/lib/active_model/attribute_methods.rb:278:in `undefine_attribute_methods'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/activerecord-3.2.13/lib/active_record/attribute_methods.rb:85:in `undefine_attribute_methods'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/activerecord-3.2.13/lib/active_record/attribute_methods/read.rb:37:in `undefine_attribute_methods'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/activerecord-3.2.13/lib/active_record/model_schema.rb:299:in `reset_column_information'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/activerecord-jdbc-adapter-1.2.7/lib/arjdbc/jdbc/base_ext.rb:10:in `reset_column_information_with_arjdbc_base_ext'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/activerecord-3.2.13/lib/active_record/session_store.rb:112:in `setup_sessid_compatibility!'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/activerecord-3.2.13/lib/active_record/session_store.rb:100:in `find_by_session_id'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/activerecord-3.2.13/lib/active_record/session_store.rb:308:in `get_session'
/Users/jnorton/workspace/echo-reverb-rails/config/initializers/buffered_logger_silencer_fix.rb:18:in `silence'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/activerecord-3.2.13/lib/active_record/session_store.rb:307:in `get_session'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/rack-1.4.5/lib/rack/session/abstract/id.rb:251:in `load_session'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/actionpack-3.2.13/lib/action_dispatch/middleware/session/abstract_store.rb:49:in `load_session'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/actionpack-3.2.13/lib/action_dispatch/middleware/session/abstract_store.rb:57:in `stale_session_check!'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/actionpack-3.2.13/lib/action_dispatch/middleware/session/abstract_store.rb:49:in `load_session'
org/jruby/RubyBasicObject.java:1683:in `__send__'
org/jruby/RubyKernel.java:2107:in `send'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/rack-1.4.5/lib/rack/session/abstract/id.rb:135:in `load!'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/rack-1.4.5/lib/rack/session/abstract/id.rb:127:in `load_for_read!'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/rack-1.4.5/lib/rack/session/abstract/id.rb:59:in `[]'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/actionpack-3.2.13/lib/action_dispatch/middleware/flash.rb:238:in `call'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/rack-1.4.5/lib/rack/session/abstract/id.rb:210:in `context'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/rack-1.4.5/lib/rack/session/abstract/id.rb:205:in `call'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/actionpack-3.2.13/lib/action_dispatch/middleware/cookies.rb:341:in `call'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/activerecord-3.2.13/lib/active_record/query_cache.rb:64:in `call'
/Users/jnorton/workspace/echo-reverb-rails/vendor/bundle/jruby/1.9/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/connection_pool.rb:479:in `call' …Run Code Online (Sandbox Code Playgroud) 我只花了三天时间撞到墙上试图弄清楚为什么一个简单的"耙子"不能通过我的spec文件.
如果您遇到这种情况:在任何文件夹路径中都没有空格!认真.实际上,从这里开出的任何东西都没有空格.
这是我的控制台输出:
(中/Users/*****/Desktop/Learning Ruby/learn_ruby)
$ rake
/Users/*******/Desktop/Learning Ruby/learn_ruby/00_hello/hello_spec.rb:116:
in `require': cannot load such file -- hello (LoadError)
Run Code Online (Sandbox Code Playgroud) 我正在使用 RSpec2 v2.13.1,它似乎应该包含rspec-mocks ( https://github.com/rspec/rspec-mocks )。当然它列在我的 Gemfile.lock 中。
但是,当我运行测试时,我得到
Failure/Error: allow(Notifier).to receive(:new_comment) { @decoy }
NoMethodError:
undefined method `allow' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x007fc302aeca78>
Run Code Online (Sandbox Code Playgroud)
这是我尝试运行的测试:
require 'spec_helper'
describe CommentEvent do
before(:each) do
@event = FactoryGirl.build(:comment_event)
@decoy = double('Resque::Mailer::MessageDecoy', :deliver => true)
# allow(Notifier).to receive(:new_comment) { @decoy }
# allow(Notifier).to receive(:welcome_email) { @decoy }
end
it "should have a comment for its object" do
@event.object.should be_a(Comment)
end
describe "email notifications" do
it "should be sent for a user who chooses to be notified" do …Run Code Online (Sandbox Code Playgroud) 我正在研究使用CQRS和DDD原则的分布式系统.基于此,我决定我的实体的主键应该是guids,它是由我的域(而不是数据库)生成的.
我一直在阅读guids作为主键.但是,如果应用于Azure SQL数据库,似乎某些最佳实践不再有效.
如果使用内部SQL服务器机器,顺序guid很好 - 生成的顺序guid将始终是唯一的.但是,在Azure上,情况不再如此.正如在这个帖子中讨论的那样,它甚至不再受支持了; 并且生成它们也是一个坏主意,因为它成为单点故障,并且不再保证服务器之间的唯一性.我猜连续的guid在Azure上没有意义,所以我应该坚持使用常规guid.它是否正确?
Guid类型的列是群集的不良候选者.但是这篇文章指出Azure上不是这种情况,而这一点恰恰相反!我应该相信哪一个?我应该只使我的主键成为一个guid并将其保持群集(因为它是主键的默认值); 或者我不应该将其聚类并选择另一列进行聚类?
感谢您的任何见解!
domain-driven-design primary-key azure cqrs azure-sql-database
Memento设计模式用于将对象还原到先前的状态,例如撤消。但是我们可以多次撤消和重做。我已经阅读了多次文章,但是我还是不清楚它们是否相似或相辅相成,可以一起使用。
State模式可以与Memento Design模式相关或一起使用吗?