除了30年的模式之外,MVC从未用于当前的应用程序.MVP是其继任者,旨在处理90年代推出的基于事件的应用程序.被动视图和监督控制器似乎已经上升到顶部.对于这两者,几乎没有必要谈论MVC/MVP.
具体来说,ASP.NET MVC中的控制器操作是否会带回创建该视图的视图?在MVC中,控制器不会创建视图或与它们对话.将ASP.NET MVC称为MVC实现有多准确?或者,它的准确名称是什么?
model-view-controller mvp asp.net-mvc design-patterns passive-view
当我们在版本控制系统(例如TFS)中注册代码时,我们需要开发用于编写注释的指南.
例如,当我们提交错误修正时,我们会创建一个注释"修复错误#..."
我们试图就这一主题进行头脑风暴,但大多数想法带来的附加值太少.
我将不胜感激任何建议.
我正在使用Visual Studio并执行有效的动态转换.RTTI已启用.
编辑:更新代码更加真实
struct base
{
virtual base* Clone()
{
base* ptr = new base;
CopyValuesTo( ptr );
return ptr;
}
virtual void CopyValuesTo( base* ptr )
{
...
}
virtual ~base()
{
}
}
struct derived : public base
{
virtual base* Clone()
{
derived* ptr = new derived;
CopyValuesTo( ptr );
return ptr;
}
virtual void CopyValuesTo( base* ptr )
{
...
}
virtual ~derived()
{
}
}
void Class1::UseNewSpec( base* in_ptr ) //part of a totally unrelated …Run Code Online (Sandbox Code Playgroud) 经过太多的实验,我得出结论,Windows Installer简直就是糟糕的技术.但客户需要MSI文件.
那么,我如何创建一个MSI文件,将EXE文件提取到临时目录并使用与传递给EXE文件相同或相似的选项运行它?
Msiexec(命令行选项)中解释了MSI的选项(MSI的低级"运行"是msiexec选项package.msi).
编辑:mjmarsh的WiX解决方案看起来很有效.我还没有机会尝试它(关键时刻).如果它有效,我会接受它.
编辑:它不起作用.遗失的部分:有人/无人看管似乎没有.
无论如何,唯一能完成这项工作的是自定义动作来杀死它的父进程!
编辑:所以有人发布了一个进一步的答案包装整个事情作为安装后的自定义操作.理论上可行,但由于可能需要重新启动(感谢MS for .NET 4有时需要重新启动),我们必须做进一步的hackery.所以从优势矩阵:
Transparency: No. One big custom action.
Customizability: No.
Standardization: No.
Management and reporting: No. Appears to work but will not.
Security: No benefit.
Validation: No. The hackery required to survive reboot makes this sure to not work.
Resiliency: Completely defeated.
Rollback: No. Rollback didn't work when we were using MSI anyway.
Patching & Updates: No. We have a local solution anyway.
Logging: No. Appears to work …Run Code Online (Sandbox Code Playgroud) 我最近编写了一个使用简单生产者/消费者模式的程序.它最初有一个与不正确使用线程有关的错误.我最终解决了这个问题.但它让我想到是否有可能以无锁的方式实现生产者/消费者模式.
我的要求很简单:
所以我写了这个:
QUEUE_ITEM = None
# this is executed in one threading.Thread object
def producer():
global QUEUE_ITEM
while True:
i = produce_item()
QUEUE_ITEM = i
# this is executed in another threading.Thread object
def consumer():
global QUEUE_ITEM
while True:
i = QUEUE_ITEM
consume_item(i)
Run Code Online (Sandbox Code Playgroud)
我的问题是:这段代码是否是线程安全的?
直接评论:这段代码不是真的无锁 - 我使用CPython并且它有GIL.
我测试了一点代码,它似乎工作.它转换为一些由于GIL而成为原子的LOAD和STORE操作.但是我也知道del x当x实现__del__方法时,操作不是原子的.因此,如果我的项目有__del__方法并且发生了一些讨厌的调度,那么事情可能会破裂.或不?
另一个问题是:为了使上述代码正常工作,我必须施加什么样的限制(例如生成的项目类型)?
我的问题只是关于利用CPython和GIL的怪癖的理论可能性,以便提出无锁(即没有像代码中的threadading.Lock那样的锁)解决方案.
说,我对我的代码做了很多更改,只需要提交一些更改.有没有办法在mercurial中做到这一点?我知道darcs有这样一个功能.
我知道hg transplant可以在分支之间执行此操作,但是我需要这样的东西来提交当前分支中的代码而不是从其他分支添加更改集时.
如果我使用存储过程,我可以使用ORM吗?
编辑:
如果我可以使用ORM,那是不是因为使用ORM而破坏了部分数据库不可知性的原因?换句话说,如果我使用存储过程将自己绑定到特定数据库(或者假设错误),为什么还要使用ORM呢?
我有一个Dictionary包含物品和价格.这些项目是唯一的,但在应用程序的生命周期中慢慢添加和更新(也就是说,我事先不知道项目字符串).我想将此结构绑定到DataGridView,因此我可以在我的表单上显示更新,如:
Dictionary<string, double> _priceData = new Dictionary<string, double>();
BindingSource _bindingSource = new BindingSource();
dataGridView1.DataSource = _bindingSource;
_bindingSource.DataSource = _priceData;
Run Code Online (Sandbox Code Playgroud)
但不能,因为Dictionary没有实现IList(或IListSource,IBindingList或IBindingListView).
有没有办法实现这个目标?我需要保留一个唯一的项目列表,但也要更新现有项目的价格,因此Dictionary我认为a 是理想的数据结构,但我找不到在我的表单上显示数据的方法.
更新:
Marc的建议下面的工作非常好,但我仍然不确定如何在执行期间更新DataGridView.
我有一个类级变量:
private DictionaryBindingList<string, decimal> bList;
Run Code Online (Sandbox Code Playgroud)
然后在Main():中实例化
bList = new DictionaryBindingList<string,decimal>(prices);
dgv.DataSource = bList;
Run Code Online (Sandbox Code Playgroud)
然后在程序执行期间,如果将新条目添加到字典中:
prices.Add("foobar", 234.56M); bList.ResetBindings();
Run Code Online (Sandbox Code Playgroud)
我认为这将刷新DataGridView.为什么不?
我正在做一些性能指标,我遇到了一些对我来说很奇怪的事情.我计时以下两个功能:
private static void DoOne()
{
List<int> A = new List<int>();
for (int i = 0; i < 200; i++) A.Add(i);
int s=0;
for (int j = 0; j < 100000; j++)
{
for (int c = 0; c < A.Count; c++) s += A[c];
}
}
private static void DoTwo()
{
List<int> A = new List<int>();
for (int i = 0; i < 200; i++) A.Add(i);
IList<int> L = A;
int s = 0;
for (int j = 0; …Run Code Online (Sandbox Code Playgroud) 我正在做一些研究或谷歌搜索处理密码散列和盐析的不同方法,并遇到了这个有趣的链接:
现在,基本上建议的是创建两个用户函数,一个用于散列,另一个用于检查散列.
盐是伪随机的,但实际上是基于密码(让我感觉不好?).
散列函数也伪随机地"散布"哈希字符串中的盐.
哈希检查功能反转盐洒,然后进行实际的哈希检查.
现在,我知道每个密码哈希的唯一salt =好,但是具有散列密码并创建存储在db函数中的salt的逻辑可能=坏.
我喜欢盐不明显的想法,它也不需要基于一些有希望的一致性值,如用户名,用户ID,出生日期等,但正如我所说,我确实对实现有疑问.
那么,人们对"最佳方法解决方案"的看法和想法是什么?