我正在研究一种基本上是n层协作应用程序的新架构(不是企业级,只是一个有可能大幅增长的小项目),我已经在努力训练自己使用IoC,在某种程度上, TDD,我想知道,一般来说,只是手工编写工作流逻辑是否明智,或者我是否应该深入学习和整合WF4(Windows Workflow 4.0,.NET 4.0的一部分),以便WF成为字面意思整个应用程序的控制器,即"MVC"中的实用C(不是ASP.NET MVC,而是模式).那么WF4中的工作流活动是否应该成为高度可扩展/可扩展的基于Web的协作应用程序的主要控制器?或者我问完全错误的问题?
这是一个模糊的问题,我敢肯定,所以抽象的答案和特定的答案一样受欢迎.
我知道WF4是对WF3进行重大改造和重新设计的地方,WF3在WF4中已经清理了很多使WF3成为糟糕技术选择的东西.例如,据我所知(虽然我看起来并不是很努力,而且几乎没有对此进行报道),WF4活动或多或少可以通过[TestMethod]和嘲弄来测试(有人知道请确认?WF的可测试性对我们来说是一个巨大的问题).我对使用WF的XML图表或后期加载很感兴趣,我更喜欢编写具体的C#工作流声明,但如果工作流可以用编译语言简洁地编写并且可以测试,我很想付钱注意它.因此,如果有这些改进,其他诸如改善性能之类的技术再次引起了我对该技术的关注,而我之前曾对WF3进行过嘲讽.
此外,根据微软的说法,WF4是微软希望在未来使用MS CRM,MS SharePoint等不同工作流技术的经验教训后,为所有众多工作流程驱动的产品实现标准化的目标.我当然对赌博感到好奇一个通用的功能,但只有实现可以简洁,在编译时进行类型检查,可测试和可维护.
编辑:只有那些知道WF4(而不是WF3)的人的答案才会被认为是"答案".
我有一个ROW_NUMBER()的问题,如果我在下面的查询中使用它与DISTINCT我有2个场景:1-直接运行此查询:给我示例400记录作为结果2-取消注释以[ - 开头的行-Uncomment1--]:给我700条记录,因为它复制了一些记录而不是所有记录
我想要的是解决这个问题或找到任何方法在每一行旁边显示一个行计数器,以使[在1到30之间的rownumber] - Uncomment2--
如果我把整个查询放在一个表中,然后过滤它,它是工作但它仍然很慢
等待任何反馈,我会很感激
SELECT * FROM
(SELECT Distinct CRSTask.ID AS TaskID,
CRSTask.WFLTaskID,
--Uncomment1-- ROW_NUMBER() OVER (ORDER By CRSTask.CreateDate asc ) AS RowNum ,
CRSTask.WFLStatus AS Task_WFLStatus,
CRSTask.Name AS StepName,
CRSTask.ModifiedDate AS Task_ModifyDate,
CRSTask.SendingDate AS Task_SendingDate,
CRSTask.ReceiveDate AS Task_ReceiveDate,
CRSTask.CreateDate AS Task_CreateDate,
CRS_Task_Recipient_Vw.Task_CurrentSenderName,
CRS_Task_Recipient_Vw.Task_SenderName,
CRS_INFO.ID AS CRS_ID,
CRS_INFO.ReferenceNumber,
CRS_INFO.CRSBeneficiaries,
CRS_INFO.BarCodeNumber,
ISNULL(dbo.CRS_FNC_GetTaskReceiver(CRSTask.ID), '') + ' ' + ISNULL
(CRS_Organization.ArName, '')
AS OrgName,
CRS_Info.IncidentID,
COALESCE(CRS_Subject.ArSubject, '??? ????') AS ArSubject,
COALESCE(CRS_INFO.Subject, 'Blank Subject') AS CRS_Subject,
CRS_INFO.Mode,
CRS_Task_Recipient_Vw.ReceiverID,
CRS_Task_Recipient_Vw.ReceiverType, …
Run Code Online (Sandbox Code Playgroud) 当我们使用内置的.net MSI安装程序时,为什么要选择Windows Installer XML(WiX)?
我有一张包含大量记录的表(可能超过500 000或1 000 000).我在此表中添加了一个新列,我需要使用此表中另一列的相应行值为列中的每一行填充一个值.
我尝试使用单独的事务来选择100个记录的每个下一个块并更新它们的值,但是这仍然需要几个小时才能更新Oracle10中的所有记录.
在SQL中执行此操作的最有效方法是什么,而不使用某些特定于方言的功能,因此它可以在任何地方使用(Oracle,MSSQL,MySQL,PostGre等)?
附加信息:没有计算字段.有索引.使用生成的SQL语句逐行更新表.
我只是从Android dev开始,虽然Milestone是一个不错的设备,但Java并不是我的自然语言,而且我在Android SDK,Eclipse和Java本身的Google文档上都很挣扎.无论如何...
我正在为Android编写一个微博客户端,以配合我的Windows客户端(MahTweets).目前我已经有推文来来往往,问题出在UI上.
初始调用将正确订购商品(从最高到最低)
刷新时
处理推文后,我正在调用adapter.notifyDataSetChanged();
最初我认为适配器上的getItem()需要排序(下面的代码是我最终得到的),但我仍然没有运气.
public class TweetAdapter extends BaseAdapter
{
private List<IStatusUpdate> elements;
private Context c;
public TweetAdapter(Context c, List<IStatusUpdate> Tweets)
{
this.elements = Tweets;
this.c = c;
}
public int getCount() {
return elements.size();
}
public Object getItem(int position) {
Collections.sort(elements, new IStatusUpdateComparator());
return elements.get(position);
}
public long getItemId(int id) {
return id;
}
public void Remove(int id)
{
notifyDataSetChanged();
}
public View getView(int position, …
Run Code Online (Sandbox Code Playgroud) 我已经搜索过但找不到任何结果(我的术语可能已关闭)所以请原谅我,如果以前曾经问过这个问题.
我想知道是否有一种简单的方法可以void*
在不首先声明函数指针然后为函数指针分配地址的情况下调用C中的函数.
即.假设要调用的函数是typevoid(void)
void *ptr;
ptr = <some address>;
((void*())ptr)(); /* call ptr as function here */
Run Code Online (Sandbox Code Playgroud)
用上面的代码,我得到错误C2066:在VC2008中强制转换为函数类型是非法的
如果可能,具有返回类型和多个参数的函数的语法有何不同?
如何找到抽象类的大小?
class A
{
virtual void PureVirtualFunction() = 0;
};
Run Code Online (Sandbox Code Playgroud)
由于这是一个抽象类,我无法创建此类的对象.如何使用'sizeof'运算符找到抽象类A的大小?
在cmd.exe中编写一些最近的脚本时,我需要使用findstr
正则表达式 - 客户需要标准cmd.exe命令(没有GnuWin32,Cygwin也不是VBS,也不是Powershell).
我只想知道变量是否包含任何大写字符并尝试使用:
> set myvar=abc
> echo %myvar%|findstr /r "[A-Z]"
abc
> echo %errorlevel%
0
Run Code Online (Sandbox Code Playgroud)
当%myvar%
设置为abc
,实际输出字符串并设置errorlevel
为0,表示找到了匹配项.
但是,完整列表变体:
> echo %myvar%|findstr /r "[ABCDEFGHIJKLMNOPQRSTUVWXYZ]"
> echo %errorlevel%
1
Run Code Online (Sandbox Code Playgroud)
确实不输出的行,它正确地设置errorlevel
为1.
此外:
> echo %myvar%|findstr /r "^[A-Z]*$"
> echo %errorlevel%
1
Run Code Online (Sandbox Code Playgroud)
也按预期工作.
我显然在这里遗漏了一些东西,即使它只是在findstr
某种程度上被打破了.
为什么第一个(范围)正则表达式在这种情况下不起作用?
然而更奇怪的是:
> echo %myvar%|findstr /r "[A-Z]"
abc
> echo %myvar%|findstr /r "[A-Z][A-Z]"
abc
> echo %myvar%|findstr /r "[A-Z][A-Z][A-Z]"
> echo %myvar%|findstr /r …
Run Code Online (Sandbox Code Playgroud) 我有一组日志和调试功能,我想在多个模块/对象中使用它们.我希望能够使用命令行开关全局打开/关闭它们.
下面的代码执行此操作,但是,我希望能够省略包名并将所有内容保存在单个文件中.
更具体地说,我想将日志记录函数名称导入到每个模块中,以便可以在没有任何包名称限定的情况下调用它们(类似于C++ use namespace;
指令),并且我希望能够从使用的脚本全局启用/禁用它们它们在我下面的示例代码中.
另一件事 - 我不认为我完全理解为什么以下代码有效.
#! /usr/bin/perl -w
use strict;
use Getopt::Long;
{
package LogFuncs;
use threads;
use Time::HiRes qw( gettimeofday );
# provide tcpdump style time stamp
sub _gf_time {
my ( $seconds, $microseconds ) = gettimeofday();
my @time = localtime($seconds);
return sprintf( "%02d:%02d:%02d.%06ld",
$time[2], $time[1], $time[0], $microseconds );
}
sub logerr;
sub compile {
my %params = @_;
*logerr = $params{do_logging}
? sub {
my $msg = shift;
warn …
Run Code Online (Sandbox Code Playgroud)