通过不同的线程(一个读取线程和一个写入线程)同时读取和写入串行端口是否安全?是否有必要在每个线程中添加读/写锁定?
我有一个常见的场景,我正在寻找一些有DDD和域建模经验的人的指导.
假设我开始构建一个博客引擎,第一个要求是在发布文章后,用户可以开始在其上发布评论.这开始很好,并导致以下设计:
public class Article
{
public int Id { get; set; }
public void AddComment(Comment comment)
{
// Add Comment
}
}
Run Code Online (Sandbox Code Playgroud)
我的MVC控制器设计如下:
public class ArticleController
{
private readonly IRepository _repository;
public ArticleController(IRepository repository)
{
_repository = repository;
}
public void AddComment(int articleId, Comment comment)
{
var article = _repository.Get<Article>(articleId);
article.AddComment(comment);
_repository.Save(article);
return RedirectToAction("Index");
}
}
Run Code Online (Sandbox Code Playgroud)
现在一切正常,它符合要求.下一次迭代我们得到一个要求,即每次发布评论时,博客作者都应该收到一封电子邮件通知他.
在这一点上,我有两个我能想到的选择.1)修改文章以要求IEmailService(在ctor?中)或从静态引用到我的DI容器获取EmailService
1a)看起来很难看.我相信它破坏了我的实体知道服务的一些域模型规则?
public class Article
{
private readonly IEmailService _emailService;
public Article(IEmailService emailService)
{
_emailService = emailService;
}
public void AddComment(Comment comment) …Run Code Online (Sandbox Code Playgroud) 我已经开始在我的项目中使用Git,其中前两个提交只是一些初始设置(.gitignore和.gitattributes),第三个提交M2添加了SVN主干的内容:
I1 -- I2 -- M2 -- N -- .. -- Z
Run Code Online (Sandbox Code Playgroud)
我已经在名为svn的分支中导入了SVN历史记录,其中M1是SVN中继(内容与M2相同,除了.gitignore和.gitattributes):
A -- B -- ... -- K -- L -- M1
Run Code Online (Sandbox Code Playgroud)
问:合并两个分支的最佳方法是什么?
我可以将M1和M2合并到M3中,然后重新绑定,但我不知道如何删除I1和I2提交,如果我可以安全地删除M3提交(我已经找到一些建议来保留合并提交,但是这种情况M3不再需要了).
A -- B -- ... -- K -- L -- M1
\
M3 -- N' -- .. -- Z'
/
I1 -- I2 -- M2 -- N -- .. -- Z …Run Code Online (Sandbox Code Playgroud) 我有一个带有一个暴露过滤器的视图(一个选择).当用户单击"应用"时,它使用ajax重新填充.我希望他们不必点击它,只需在更改选择时重新填充.我假设我需要一些或多或少像这样的JS(尽管这似乎不太合适):
$('#edit-tid').change(function(){
$('#views-exposed-form-MYVIEW-page-1').submit();
});
Run Code Online (Sandbox Code Playgroud)
首先,我认为会这样做,但它没有被提交.谁知道为什么?
第二,注入该代码的最佳方法是什么?我正在考虑使用View页脚,因为它很简单,但还有其他更好的想法吗?
UPDATE:上述代码是工作(通过视图页脚注射),但仅在第一次.我猜选择被ajax调用覆盖了,但是行为没有被重新连接(或其他东西).嗯...
更新#2:为简单起见,我要放弃ajax.
这有点是一个开放式的问题,但我正在尝试通过异常处理中的良好实践来提高我的技能,特别是在检查空值时.
我知道什么时候检查空值,但我不得不说我没有一半的时间,这对我很困扰.我知道除非你使用可以为空的int,否则不能将int设置为null.我知道字符串可以设置为null或空,因此您可以检查IsNullOrEmpty.
显然,在构造函数中,您还希望在那里添加显式检查.这是给定的.而且我认为你应该在将数组,通用对象或其他对象传入一个基本上可以设置为null的方法时检查null吗?
但是这里有更多的异常处理.例如,我不知道何时总是检查并在代码中明确地抛出空引用异常.如果我有传入的参数,通常它很直接,但总有一些我问自己的情况,是否需要一个明确的空投?
我真的没有具体的例子,但想知道是否有一个很好的引用,真正讨论异常处理参考何时抛出它们(在方法,类中,你命名).
我在Windows Vista上安装了Python 2.6.如果我在C:\Python26>和我输入python,Python的命令行界面将根据需要启动.
我已经添加C:\Python26到我的PATH所以我可以从任何目录运行Python脚本,但它没有帮助.特别是,从任何其他目录,python无法识别该命令.
我很欣赏任何改变会使这项工作变得有效的猜测.
编辑: 首先,我重新打开了我的cmd窗口(几次),这不是问题.
为了澄清我如何添加C:\Python26到PATH,我点击以下内容:
计算机 - >系统属性 - >高级系统设置 - >环境变量
在我选择的位置PATH,然后单击"编辑".我添加C:\Python26到"变量值"字段,使用分号将其与先前的条目分开.然后我点击确定几次.
编辑#2 我现在PATH通过path在命令提示符下键入来检查我. C:\Python26肯定是在路上.无论如何我会重新启动,看看是否有帮助.
我有一个显示记录列表的页面.用户可以使用单选按钮选择记录状态,例如:
<div id="record_653">
<label><input type="radio" name="status_653" value="new" checked/>new</label>
<label><input type="radio" name="status_653" value="skipped" />skipped</label>
<label><input type="radio" name="status_653" value="downloaded" />downloaded</label>
</div>
Run Code Online (Sandbox Code Playgroud)
我正在使用JQuery将用户所做的更改发送回服务器,在那里我使用它们来更新数据库.这是我所做的简化版本:
$("#record_653").click(
function(event) {
var url = ...,
params = ...;
post(url,params);
});
Run Code Online (Sandbox Code Playgroud)
问题是,即使用户单击先前检查过的相同按钮,此代码也会创建请求.我真正想要的是"on change"事件,除了它在Internet Explorer中的行为不是很有用(例如这里).
所以我想我不知何故必须确定click事件是否改变了值.
旧值是存储在某个地方(在事件中的DOM?中)所以我可以比较它?
如果没有,我应该如何存储旧值?
我正在编写一个单元测试套件来测试TCP/IP通信库.
当我使用BeginAcceptClient和EndAcceptClient时,消息在后台线程中接收.
收到消息后,我对它执行一些断言,但如果任何断言失败,则VSTestHost.exe崩溃.
我用Google搜索了一下,发现Assert异常是在后台线程中引发的.
编辑:我正在做的示例代码,只是为了说明:
public void TestFooMessage() {
Server.OnReceive += (s, e) => {
Assert.IsInstanceOfType(e.Message, typeof(Foo));
};
var message = new Foo();
Client.Send(message);
}
Run Code Online (Sandbox Code Playgroud)
有谁知道如何让它按预期工作:记录断言并继续正常运行?
我想在这里做一些非常基本的事情,我不希望给我这么多问题.我在我的主要类Window上有一个名为ItemList的公共属性List<string>.我在程序的整个生命周期中添加了这个列表,并希望我在表单上的ListBox控件在我向ItemList属性添加新项时自动更新.
到目前为止,我有以下XAML:
<Window x:Class="ElserBackupGUI.Main"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Backup Profile Editor [New Profile]" Height="480" Width="640">
<DockPanel>
<Menu DockPanel.Dock="Top">
<MenuItem Header="File">
<MenuItem Header="Open"/>
</MenuItem>
</Menu>
<StackPanel Orientation="Vertical" DockPanel.Dock="Top" Margin="10 10 10 3">
<TextBlock>Items to backup:</TextBlock>
</StackPanel>
<DockPanel DockPanel.Dock="Bottom" Margin="10 0 10 10">
<StackPanel Orientation="Horizontal">
<Button Name="AddDirectoryButton" Height="22.725" Width="120" Margin="0 0 6 0" Click="AddDirectoryButton_Click">Add Directory...</Button>
<Button Name="AddFileButton" Height="22.725" Width="90" Margin="0 0 6 0" Click="AddFileButton_Click">Add File...</Button>
<Button Name="RemoveDirectoriesButton" Height="22.725" Width="75.447" Margin="0 0 6 0">Remove</Button>
</StackPanel>
</DockPanel>
<ListBox Name="SelectedItems" Margin="10 0 10 10" ItemsSource="{Binding …Run Code Online (Sandbox Code Playgroud) c# ×4
.net ×2
jquery ×2
ajax ×1
bdd ×1
c++ ×1
data-binding ×1
drupal ×1
drupal-6 ×1
drupal-views ×1
git ×1
javascript ×1
listbox ×1
merge ×1
multiline ×1
onchange ×1
path ×1
radio-button ×1
rebase ×1
serial-port ×1
string ×1
unit-testing ×1
wpf ×1