更新:因为我们通常说,"情况将决定任何设计模式是否适合这项工作"......现在生活中的咖啡订购系统是否可以使用装饰模式解决?
装饰模式是否太过于实施咖啡订购系统?Head First Design Patterns一书以它为例,但我想我会用2个数组或表来实现它:
咖啡类型(法国烤,房子混合等)
添加(焦糖,奶油,肉桂等)
所以它可以是price.php中的2个数组,或DB中的2个数组,并读入2个数组.
当客户订购咖啡时,选择将总结价格.
看起来使用装饰器模式是相当矫枉过正的,或者你认为有充分的理由实际使用这种模式?作为一个例子,我认为它很好,但是如果它看起来像一个现实生活中的问题,它可以用一种简单的方法完全解决,但是使用更复杂的解决方案也会感觉很奇怪.
我正在尝试将子视图添加到tableview单元格中,当然也使用CGRect作为其中的一部分.但是,我在构建时遇到语法错误:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
switch (indexPath.section) {
case 1:
CGRect <<- SYNTAX ERROR cellFrame = CGRectMake(0, 0, 300, 65);
cell = [[[UITableViewCell alloc] initWithFrame:cellFrame reuseIdentifier: CellIdentifier] autorelease];
CGRect infoRect = CGRectMake(0, 5, 295, 55);
UILabel *infoLabel = [[UILabel alloc] initWithFrame:infoRect];
infoLabel.tag = 1;
[cell.contentView addSubview:infoLabel];
[infoLabel release];
break;
default:
break;
}
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
Run Code Online (Sandbox Code Playgroud)
我试过右键单击框架 - …
我有一张成对的物品表.我想自己加入它,这样我就可以在一个查询中检索该对的两侧.它是有效的SQL(我认为),SQLite引擎实际上接受它,但我无法让DBIx :: Class咬紧牙关.
package Schema::Half;
use parent 'DBIx::Class';
__PACKAGE__->load_components('Core');
__PACKAGE__->table('half');
__PACKAGE__->add_columns(
whole_id => { data_type => 'INTEGER' },
half_id => { data_type => 'CHAR' },
data => { data_type => 'TEXT' },
);
__PACKAGE__->has_one(dual => 'Schema::Half', {
'foreign.whole_id' => 'self.whole_id',
'foreign.half_id' => 'self.half_id',
# previous line results in a '='
# I'd like a '<>'
});
package Schema;
use parent 'DBIx::Class::Schema';
__PACKAGE__->register_class( 'Half', 'Schema::Half' );
package main;
unlink 'join.db';
my $s = Schema->connect('dbi:SQLite:join.db');
$s->deploy;
my $h = $s->resultset('Half'); …Run Code Online (Sandbox Code Playgroud) 我有一个线程,并尝试建立连接.在线程中,我打电话给第三方库.有时,此调用会挂起,并且永远不会返回.在UI线程上,我希望能够通过中止线程来取消连接尝试,该线程应该中止对第三方库的挂起调用.
我已经调用了Thread.Abort,但现在已经读过Thread.Abort仅在控件返回托管代码时才有效.我观察到这是真的,因为线程永远不会中止,我现在已经坐在Thread.Join上十分钟了.我该怎么办这个挂线程?我应该将引用置空并继续吗?我想尽可能干净 -
我试图用布尔值检查我的linq查询中的日期是这个日期还是更大.但它不像我想要的那样工作.
这是我的代码
public bool CheckMonth(int month)
{
if (month > System.DateTime.Now.Month)
{
return true;
}
else if (month == System.DateTime.Now.Month)
{
return true;
}
else
{
return false;
}
}
public virtual IList<DateItem> GetThreeDateToList()
{
var data = new ScoutDataDataContext();
var q = (from d in data.DateDetails
where d.Activate == 1 && CheckMonth(d.EndDate.Month)
orderby d.Date.Date.Month descending
select new DateItem
{
Title = d.Title,
Date = d.Date.Date + " - " + d.EndDate.Date,
Link = d.Link,
}).Take(3);
return q.ToList();
}
Run Code Online (Sandbox Code Playgroud)
谁有不同的方式?
我可以绑定到属性,但不能绑定到另一个属性中的属性.为什么不?例如
<Window DataContext="{Binding RelativeSource={RelativeSource Self}}"...>
...
<!--Doesn't work-->
<TextBox Text="{Binding Path=ParentProperty.ChildProperty,Mode=TwoWay}"
Width="30"/>
Run Code Online (Sandbox Code Playgroud)
(注意:我不是要做master-details或者其他任何东西.这两个属性都是标准的CLR属性.)
更新:问题是我的ParentProperty依赖于XAML中的一个对象被初始化.不幸的是,该对象后来在XAML文件中定义而不是Binding,因此当Binding读取ParentProperty时,该对象为null.由于重新排列XAML文件会搞砸布局,我能想到的唯一解决方案是在代码隐藏中定义Binding:
<TextBox x:Name="txt" Width="30"/>
// after calling InitializeComponent()
txt.SetBinding(TextBox.TextProperty, "ParentProperty.ChildProperty");
Run Code Online (Sandbox Code Playgroud) 我有一个关于在Xcode和GDB上调试的简单问题.
我经常遇到一个错误:
unrecognized selector sent to instance 0x1081ad0
Run Code Online (Sandbox Code Playgroud)
这使得程序加载到GDB中.有没有一种简单的方法可以从GDB中检查该内存中的实例?
我有一些html会在每个页面中,所以我把它卡在.cs文件中.这段html有很多引号,所以我宁愿不要逃避每个(\").这并不难,因为我可以使用find/replace但我想知道.有没有一个很好的方法混合html和CS所以我可以轻松生成页面?
设计模式真的有多重要?
我认为前一代程序员并没有那么多使用设计模式(那些在80年代和90年代中期之前毕业的人).最近的毕业生一般都知道它并且使用它更多吗?
如果你有兴趣,我也做了一个调查,你可以在这里查看:
http://www.surveymonkey.com/s.aspx?sm=kJOdGX0RPx5FGrfPVm_2bmIw_3d_3d
更新:以下是初步调查结果:
我一直在阅读关于依赖注入的问题并且有一个简单的问题.我可以理解如何通过构造函数或setter注入所需的依赖项由DI框架自动装配.当对象决定由于某些业务流程而需要创建新对象时会发生什么?在这些情况下,我是否需要始终创建工厂?为了使它成为一个不那么抽象的问题,这里有一个例子.
假设我正在写一个Asteriods游戏.中间有一艘船可以旋转并射击星号.假设已经创建了船并注入了适当的东西.当playerShip.shoot()被调用时,我们需要创建一个bullet对象.项目符号对象需要知道它的去向(direction以及从哪里开始(point).
通常,我会做这样的事情:
bullet = new Bullet( direction, point );
Run Code Online (Sandbox Code Playgroud)
但是,这将PlayerShip类与Bullet类紧密耦合.这应该如何在依赖注入下工作?我是否需要创建一个BulletFactory接口并将其实现注入到船中?
编辑:我实际上并没有写asteriods.这是一个我认为人们会理解的简单例子.我想要一些需要创建一个运行时(而不是"连接对象")的东西,它也有它的构造函数的参数.