考虑以下控件(为简洁而剪切):
public partial class ConfigurationManagerControl : UserControl
{
public Func<string, bool> CanEdit { get; set;}
public Func<string, bool> CanDelete { get; set; }
public Dictionary<string, string> Settings
{
get { return InnerSettings; }
set
{
InnerSettings = value;
BindData();
}
}
private Dictionary<string, string> InnerSettings;
private void OnListIndexChanged(object sender, EventArgs e)
{
this.EditButton.Enabled = false;
this.DeleteButton.Enabled = false;
var indices = this.List.SelectedIndices;
if (indices.Count != 1)
{
return;
}
var index = indices[0];
var item = this.List.Items[index];
if (this.CanEdit != …Run Code Online (Sandbox Code Playgroud) JavaScript不是多线程的,显然JavaScript甚至没有自己的,但是与其他东西共享一个线程.即使在大多数现代浏览器中,JavaScript通常与绘画,更新样式和处理用户操作位于同一队列中.
这是为什么?
根据我的经验,如果JavaScript在自己的线程上运行,可以获得极大改善的用户体验,单独通过JS不阻止UI呈现或解放复杂或有限的消息队列优化样板(是的,也是你,webworkers!),开发人员已经写它自己以保持UI在整个地方的响应,当它真正归结为它.
我有兴趣理解控制这种看似不幸的设计决策的动机,从软件架构的角度来看,有一个令人信服的理由吗?
我正致力于在XNA C#中编写一个俄罗斯方块克隆,并且不确定在高级别上接近游戏数据结构方面的最佳方法.
我对碰撞检测,旋转,动画等完全没问题.我需要知道最好的方法来存储"掉落的块" - 即不再受玩家控制的块.
我认为每个Tetromino块应该存储在由4x4阵列组成的自己的类中,以便可以轻松地旋转块.问题是如何将tetromino的最终位置存储到游戏网格中,然后将tetromino切割成单个块(对于每个单元格),然后设置主游戏网格的相应位置以保持这些相同的块,然后消失tetromino一次它已达到最终位置.也许我的方法有一些缺点.
我应该为主游戏网格创建一个可以存储的10x20矩阵吗?或者我应该使用堆栈或队列以某种方式存储丢弃的块.或者可能有一些更好的方法/数据结构来存储东西?
我相信我的方式会起作用,但我正在伸出手去看看是否有人知道更好的方式或者我的方式是否足够好?
PS不是作业,这将是我的投资组合的项目.谢谢.
如果一个函数将文本文件的名称作为输入,我可以将其重构为一个文件对象(我称之为"流";是否有更好的词?).优点显而易见 - 将流作为参数的函数是:
流有什么不利之处吗?或者我应该始终将函数从文件名参数重构为流参数(当然,假设文件是纯文本的)?
在The Guerilla采访指南 Joel说,想要完成任务但不聪明的人会做一些愚蠢的事情,例如使用访问者设计模式,其中一个简单的数组就足够了.
如果应该使用Gang of Four建议的设计模式,我发现很难检测到.
因此,我想从您的工作经验中得到一些例子
我正在制作一个使用经典"跟随"机制的应用程序(Twitter和网络上的许多其他应用程序使用的机制).我正在使用MongoDB.不过,我的系统有所不同:用户可以关注用户组.这意味着,如果您关注某个群组,您将自动关注该群组成员的所有用户.当然,用户可以属于多个组.
这就是我想出的:
following用户A文档中的嵌入式阵列(被叫)中following数组中删除了后续用户的id组以相同的方式工作:当用户A跟随组X时,组X的 id被添加到following数组中.(我实际上添加了一个,DBRef所以我知道连接是针对用户还是组.)
当我必须检查用户A是否跟随组X时,我只是在用户A的后续数组中搜索组的ID .
$or条件来检查用户A是直接跟踪用户B还是通过组跟踪.像这样:
db.users.find({'$or':{'following.ref.$id':$user_id,'following.ref.$ref','users'},{'following.ref.$id':{'$in':$group_ids},'following.ref.$ref':'groups'}}})
这很好,但我想我有一些问题.例如,如何显示特定用户的关注者列表,包括分页?我不能在嵌入文档上使用skip()和limit().
我可以改变设计并使用一个userfollow集合,它可以完成嵌入式following文档的相同工作.我尝试过这种方法的问题是,根据$or我之前使用的条件,跟随两个包含相同用户的组的用户将被列出两次.为了避免这种情况,我可以使用group或MapReduce,我实际上做了它并且它可以工作,但我希望避免这样做以保持简单.也许我只需要开箱即用.或者也许我在两次尝试时采取了错误的方法.任何人都必须做类似的事情并提出更好的解决方案?
(这实际上是对我这个老问题的后续跟进.我决定发布一个新问题来更好地解释我的新情况;我希望这不是问题.)
通常我必须在数据库中插入一些数据并且无法插入,因为该表具有阻止我这样做的约束.使用我正在开发的应用程序,一些业务规则(例如"没有两个具有相同id类型和编号的人"或"XXXX产品已经注册")是使用UNIQUE或复合密钥和其他机制强制执行的.虽然我知道DBMS会抛出错误消息(如ORA-6346或),但我不知道如何在.net 4.0中捕获这些错误并将它们转换为对业务层有意义的错误.
作为一个例子:我已经看到一个插入机制,询问数据库是否已存在该寄存器,然后如果不是这样,则继续插入数据.我想这样做只使用一个查询并捕获数据库约束违规错误,因为第一种方式在我看来效率非常低(DB可以提醒你有关重复的错误).
我怎么能实现这样的东西?
注意:我认为可以从数据库中捕获异常并使用其ORA-xxxx代码来试图弄清楚发生了什么.如果错误消息显示哪个约束(名称...)已被破坏,我不记得精确,但业务层代码可以包含具有约束名称的常量,并从中了解发生了什么.
多年来,我一直在听力和阅读敏捷.我拥有一两本书,我喜欢这个主意.
我终于处于可以在我工作的地方滚动这样的东西的位置,但我非常担心这是否适合我们:
注意:我们是一家5开发商店,项目从一天或两天一直持续到几个月.我不相信有一种方法可以统治它们,但是找到足够灵活的东西以便我们能够适应所有项目会很棒.
非常感谢!
布莱恩麦凯
当我们谈论采购事件时,我们有一个简单的双写架构,我们可以写入数据库,然后将事件写入队列,如 Kafka。其他下游系统可以读取这些事件并相应地对它们采取行动/使用它们。
但是当试图使数据库和事件同步时会出现问题,因为需要对这些事件进行排序才能使其有意义。
为了解决这个问题,人们鼓励使用数据库提交日志作为事件源,并且有围绕它构建的工具,例如 Airbnb 的 Spinal Tap、Redhat 的 Debezium、Oracle 的 Golden Gate 等……它解决了一致性、排序保证和所有这些。
但是使用数据库提交日志作为事件源的问题是我们与数据库模式紧密耦合。微服务的数据库架构是公开的,数据库架构中的任何破坏性更改,如数据类型更改或列名更改,实际上都可能破坏下游系统。
那么使用 DB CDC 作为事件源是个好主意吗?
software-design ×10
architecture ×2
c# ×2
.net ×1
agile ×1
arguments ×1
browser ×1
cqrs ×1
debezium ×1
delegates ×1
javascript ×1
methodology ×1
mongodb ×1
oracle ×1
python ×1
python-3.x ×1
refactoring ×1
unit-testing ×1