我最近使用了NDepend,它为我的.net程序集和相关的pdbs提供了一个很好的报告.
我在报告中发现的最有趣的事情是抽象性与不稳定性图.我想要真正详细地理解这一点,我阅读他们的文档和在线metrices,但它只能在一定程度上有所帮助.
主要是我希望了解如何正确评估图形以及如何稳定地控制抽象性.
这里有一篇非常好的文章就这个问题进行了讨论,但除此之外我还需要更多的内容是"如何控制它?[稳定控制抽象]'

我正在编写一个WPF应用程序,它具有对具有简单要求的API的可选依赖性; 它必须在没有STAThread属性的线程上初始化/使用.当然,WPF需要STA才能让一切变得简单.
在这种情况下,无论如何都需要WPF.仅当用户选择在应用程序中启用此功能时,才需要此第三方API.这意味着一旦调用其他API,WPF应用程序就已经在运行.
如果你没有使用[STAThread]装饰主方法,它是否自动成为MTA线程?在这种情况下,这是否意味着我可以创建一个新的MTA线程并使用其他API?
如果这样可行,那么我猜这个API中的任何事件都可以使用Dispatcher与WPF应用程序通信(用于引发需要在UI中显示的事件等).但是,有一种简单的方法可以让我的WPF应用程序在MTA线程上"调用"功能来进行API调用吗?
在MTA中我猜每个线程应该能够使用状态,但我想我的STA线程(WPF应用程序)不能只是"进入"MTA线程并执行API调用?
这里有很多混淆的可能性,我会喜欢关于如何设计这样的东西的一些输入!
谢谢!
[编辑7月8日]
哦,我在上面有一些概念混淆了.线程模型当然是为PROCESS而不是为每个线程设置的,并且该第三方API不能与STA进程一起使用.
目前,我看到这个混乱的唯一方法是编写一个与此API通信的服务,然后使用命名管道与此服务进行通信.这根本不是一件小事,一个丑陋丑陋的解决方法,但第三方API不在我的控制之下.这就是人生.:|
我创建了一个MVVM测试应用程序,它在运行时读取XML文件以动态创建菜单,并根据用户选择的内容,动态加载该页面的UserControl.结果是一个很好的MVVM模式,允许您在XML文件中定义每页一个View/ViewModel对.非常好.
所以现在我只是添加了开发人员在一个页面上创建一个按钮的功能,该按钮可以转到另一个页面.我这样做的方法是在MainViewModel中构建ObservableCollection中的ViewModel集合,当我构建每个时,我将MainViewModel本身(this)注入每个UserControl-ViewModel的构造函数中.这样每个UserControl都包含MainViewModel,以便开发人员可以通过MainViewModel操作应用程序(例如调用SwitchPage(idCode)).
此外,我需要保存的任何全局状态都可以保存在每个UserControl都可以访问的MainViewModel中.
此外,每个UserControl(PageItem)都可以完全访问其他每个UserControl,这使我可以从任何UserControl基本上控制应用程序中的任何内容,这是我一直试图在MVVM应用程序中实现的很长一段时间.
所以我的问题是:这种ViewModel注入是一种有用/已知的模式,还是将ViewModel注入其子ViewModel时会出现问题?它似乎递归我,但似乎工作正常,并给了我迄今为止我想要的功能.根据我从Composite Application Library体系结构中学到的东西,这似乎与那里发生的事情类似,例如在下面的代码中,我可以根据需要将其他应用程序对象注入到我的ViewModel中.
public MainViewModel()
{
PageItems pageItems = PageItems.Create("all");
foreach (PageItem pageItem in pageItems.Collection)
{
string assemblyName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
string viewModelName = assemblyName + ".ViewModels.PageItem" + StringHelpers.ForcePascalNotation(pageItem.IdCode) + "ViewModel";
var type = Type.GetType(viewModelName);
var viewModel = Activator.CreateInstance(type, this, pageItem) as ViewModelPageItemBase;
AllPageItemViewModels.Add(viewModel);
}
CurrentPageItemViewModelIndex = 0;
LoadCurrentPageItemViewModel();
}
Run Code Online (Sandbox Code Playgroud) 有可能以某种方式模仿我的网站下载速度较慢,就好像它是托管在Web服务器上,但是来自我的localhost?
当内容从本地计算机加载得如此之快时,很难测试像Ajax加载图标这样的东西,所以我认为这可以帮助我很多?
我想知道是否有一个工具可以用于此,或者你是否需要使用javascript来添加setTimeout或setInterval代码?
我创建了一个带有SQL Server数据库的简单项目,该数据库包含许多表和大量索引,但没有什么真正复杂的.没有触发器,没有存储过程,没有额外的"数据库魔术".代码是用C#编写的,使用实体模型和动态数据站点来快速设置基础知识,因此一些键入的猴子可以投入工作并执行一些基本数据输入,同时我将修改项目以使其更加成熟.
在SQL Server 2005上测试过,一切正常.所以我通过Visual Studio进行了设置,并将其发送给键入Monkeys及其管理员.他们所要做的就是:1)创建一个新的数据库.2)执行数据库的Create脚本.3)安装我给他们的设置.4)修改连接字符串,它恰好放在特殊的配置文件中以方便使用.5)使用Web界面并在出现问题时通知我.
出了点问题.完整的错误:第1行:''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
我的代码中没有使用'row_number'.我只是使用Linq进行查询.此外,由于实体模型,我甚至不必担心做任何SQL的东西.(尽管我很擅长.)
我的第一个猜测是他们使用了错误的连接字符串.他们可能正在SQL Server上安装这个应用程序(它应该仍然可以工作),但它们并没有完全改变连接字符串,现在我的项目认为它正在使用SQL Server 2005.(或者其他什么.)我是对的还是由于某些原因引起的其他讨厌的bug?
完整错误:
[SqlException(0x80131904):第1行:'('.''row_number'附近的语法不正确不是可识别的函数名.关键字'AS'附近的语法不正确.]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception,Boolean breakConnection)+1950890 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception,Boolean breakConnection)+4846875 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)+194
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)+2392
System.Data.SqlClient.SqlDataReader.ConsumeMetaData()+33 System.Data.SqlClient.SqlDataReader.get_MetaData()+83 System.Data.SqlClient.SqlCommand.FinishExecuteReader( SqlDataReader ds,RunBehavior runBehavior,String resetOptionsString)+297
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,Boolean async)+954 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String method,DbAsyncResult result)+162
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior, Boolean returnStream,String method)+32 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior,String method)+141
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)+12
System.Data.Common.DbCommand.ExecuteReader (CommandBehavior行为)+10
System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand,CommandBehavior behavior)+387[EntityCommandExecutionException:执行命令定义时发生错误.有关详细信息,请参阅内部异常.]
System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand,CommandBehavior behavior)+423
System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute(ObjectContext context,ObjectParameterCollection parameterValues)+743
System.Data. Objects.ObjectQuery1.GetResults(Nullable1 forMergeOption)+157
System.Data.Objects.ObjectQuery`1.GetIListSourceListInternal()+ 13 System.Data.Objects.ObjectQuery.System.ComponentModel.IListSource.GetList()+ System.Web.UI.WebControls. …
我想使用Scala Actor框架进行包含大约10.000个代理(机器和产品代理)的多代理模拟.
据我所知,如果有很多演员传递消息,它会因递归而耗尽堆栈吗?
如果是这样,我如何增加底层工作线程的堆栈大小?
在Scala中,如果我有一个简单的类,如下所示:
val calc = actor {
var sum = 0
loop {
react {
case Add(n) =>
sum += n
case RequestSum =>
sender ! sum
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的领域sum应该被标记@volatile吗?虽然actor在逻辑上是单线程的(即消息是按顺序处理的),但各个反应可能发生在不同的线程上,因此state变量可能在一个线程上被改变,然后从另一个线程读取.
好吧,我确定我在这里遗漏了一些东西,但请原谅我,我是Rails的新手.
Rails中是否有某种方法可以显示对象的所有字段而不是指定每个字段?
在我的show.html模板而不是去
<p>Name: <%=h @user.full_name %></p>
<p>Email: <%=h @user.email %></p>
Run Code Online (Sandbox Code Playgroud)
我只想要一个oneliner来做这个,而不必输入我所拥有的15个左右的字段.它是一个管理页面,如果显示所有字段(id,created_at等),它很好.如果这是PHP,使用foreach需要大约5秒钟,但我用Google搜索(显然是错误的)一小时没有运气.
谢谢!
我正在尝试创建一个非常简单的关键帧动画,其中图形通过给定的中点从一个角度旋转到另一个角度.
(目的是能够通过大于180度的弧度的OBTUSE角度设置旋转动画,而不是使动画"作弊"并走向最短路径,即通过相反的ACUTE较小角度 - 这可能发生在只有一个[即目的地]关键帧.为了实现'长'的方式,我假设我需要在所需弧线的中途需要一个额外的关键帧.)
这是我到目前为止所获得的(通过最锐角将图形转换为所需的旋转):
#define DEGREES_TO_RADIANS(__ANGLE__) ((__ANGLE__) / 180.0 * M_PI)
...
[UIView beginAnimations:nil context:nil];
CGAffineTransform cgCTM = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(desiredEndingAngle));
[UIView setAnimationDuration:0.5];
graphic.transform = cgCTM;
[UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)
据我了解,我不是在寻找沿着Path的动画(因为那是翻译,而不是旋转)......
无论如何,任何帮助将非常感谢!提前致谢.
actor ×2
scala ×2
wpf ×2
.net ×1
architecture ×1
c# ×1
code-metrics ×1
concurrency ×1
entity-model ×1
hosting ×1
http-headers ×1
iphone ×1
mvvm ×1
ndepend ×1
ooad ×1
php ×1
view ×1
volatile ×1