小编Jud*_*ngo的帖子

耦合太高 - 如何更好地设计这个类?

在我的代码上运行FxCop,我收到此警告:

Microsoft.Maintainability:'FooBar.ctor与来自9个不同命名空间的99种不同类型相结合.重写或重构方法以减少其类耦合,或考虑将方法移动到与其紧密耦合的其他类型之一.高于40的类耦合表明可维护性差,40到30之间的类耦合表明适度的可维护性,并且低于30的类耦合表明良好的可维护性.

我的类是来自服务器的所有消息的登陆区域.服务器可以向我们发送不同EventArgs类型的消息:

public FooBar()
{
    var messageHandlers = new Dictionary<Type, Action<EventArgs>>();
    messageHandlers.Add(typeof(YouHaveBeenLoggedOutEventArgs), HandleSignOut);
    messageHandlers.Add(typeof(TestConnectionEventArgs), HandleConnectionTest);
    // ... etc for 90 other types
}
Run Code Online (Sandbox Code Playgroud)

"HandleSignOut"和"HandleConnectionTest"方法中的代码很少; 他们通常将工作交给另一个班级的职能部门.

如何通过较低的耦合使这个类更好?

design-patterns coupling

8
推荐指数
2
解决办法
4288
查看次数

Java MIDI - 从钢琴获取数据?

我继承了一个Java项目,项目使用旧的C++ dll从连接到计算机的钢琴接收MIDI数据.

既然Java内置了对MIDI设备的支持,我想摆脱传统的C++ DLL并且只使用纯Java.Java是否支持从连接到计算机的钢琴接收数据?我搜索谷歌的例子无济于事.

java midi

8
推荐指数
2
解决办法
9698
查看次数

使用C#和WinForms在自己的进程中选项卡

可能重复的
Windows窗体应用程序,如谷歌浏览器,具有多个进程
Chrome/IE8多进程设计,是否可以在.NET中使用?
适用于Google Chrome等多进程C#应用的示例

IE8和Google Chrome浏览器都为打开的每个选项卡分别设置了进程.

例如,您启动IE8并在自己的选项卡中打开Yahoo和Google,最终您的系统上运行了3个进程:

  • IE8本身进程[主进程]
    • Google标签流程
    • Yahoo标签流程

我正在玩C#/ WinForms中类似的东西.

举个简单的例子:我有一个显示Form的主进程,我在子进程中有一个Button.我们如何将Button从其他进程渲染到我的表单上?

c# process winforms

7
推荐指数
1
解决办法
2524
查看次数

使用C#读取Firefox书签

使用C#,我需要获取所有Firefox书签,以便将它们导入我们的数据库.我怎样才能做到这一点?

我知道这个问题,在Java中读取FF 3书签,但那里的答案似乎都围绕着Java数据库驱动程序,我不确定其中一些答案是不是特定于Java的.

我的主要问题是,"如何在C#中阅读Firefox书签?"

次要问题:我看到\%用户个人资料%\应用程序数据\ mozilla\firefox\profiles\bookmarkbackups\bookmarks- [date] .json文件 - 我可以解析一下吗?如果是这样,是否有任何现有的解析器?

修辞哀叹的问题:为什么这不能像IE一样简单,我只读了\%user profile%\ favorites中的.url文件?呸.

c# firefox favorites bookmarks

7
推荐指数
1
解决办法
7418
查看次数

Rx - 取消订阅活动

我有一个INotifyPropertyChanged对象,Foo.我使用Rx的FromEvent方法将Foo转换为可观察的事件流:

var myFoo = new Foo();
var eventStream = Observable.FromEvent<PropertyChangedEventArgs>(myFoo, "PropertyChanged");
Run Code Online (Sandbox Code Playgroud)

现在我想听一个特定的属性改变,如果.Progress == 100,取消订阅:

eventStream
   .Where(e => myFoo.Progress == 100)
   .Subscribe(OnFooFinished);
Run Code Online (Sandbox Code Playgroud)

如果进度== 100,我如何取消订阅?如果我在.Where子句后添加.Take(1)调用,那会自动取消订阅吗?

c# system.reactive

7
推荐指数
2
解决办法
9515
查看次数

使用Lucene搜索电子邮件地址

我想使用Lucene(特别是Lucene.NET)来搜索电子邮件地址域.

例如,我想搜索"@ gmail.com"以查找发送到Gmail地址的所有电子邮件.

对"*@gmail.com"运行Lucene查询会导致错误,星号不能位于查询的开头.运行"@ gmail.com"的查询不会返回任何匹配项,因为"foo@gmail.com"被视为一个完整的单词,并且您无法仅搜索单词的某些部分.

我怎样才能做到这一点?

.net lucene search

6
推荐指数
2
解决办法
5809
查看次数

诊断Windows事件查看器中的CLR错误

我们有一个.NET桌面应用程序在生产中崩溃.我们如何诊断错误?我想知道发生的异常类型,错误消息和堆栈跟踪.

因为我们的代码没有处理异常,所以我们收到了"此应用程序遇到问题并需要关闭"的 Windows消息框.唯一的选择是关闭,没有调试按钮.

这篇MSDN文章建议查看Windows事件注册表.我查了一下,里面的信息是:

错误应用程序Initect.Server.UI.exe,版本0.12.9084.90,时间戳0x49cac472,错误模块KERNEL32.dll,版本6.0.6001.18000,时间戳0x4791a81d,异常代码0xe0434f4d,错误偏移量0x0002f35f,进程ID 0x44c,应用程序启动时间0x01c9ada7f320cab0

这些信息如何告诉我异常类型,堆栈跟踪和错误消息?

clr exception-handling exception crash-dumps event-log

6
推荐指数
1
解决办法
3169
查看次数

任何可用于执行LINQ over Entity Attribute Value模式的库?

有没有人知道任何在LINQ上实现实体属性值(EAV)模式的抽象的库?我有一个大型的遗留EAV数据库,我正在尝试创建一个更干净的数据访问层,并且使用LINQ的想法真的很吸引人,所以我正在寻找任何我可以用来快速启动的代码.

linq linq-to-sql

6
推荐指数
1
解决办法
532
查看次数

Sqlite .NET和实体框架 - "尝试编写只读数据库"

---编辑---我可以提供任何其他信息来帮助解决这个问题吗?

我正在尝试在.NET WCF Web服务中启动并运行Sqlite和Entity Framework.

当我尝试将任何内容保存到数据库时,我收到错误"尝试编写只读数据库".这是完整的错误信息:

System.Data.EntityException:在提供程序连接上启动事务时发生错误.有关详细信息,请参阅内部异常

---> System.Data.SQLite.SQLiteException:尝试编写只读数据库

尝试 在[snip] ..........................
在System.Data.SQLite.SQLite3.Reset(SQLiteStatement stmt)
上编写只读数据库. ..............................>在System.Data的System.Data.EntityClient.EntityConnection.BeginDbTransaction(IsolationLevel isolationLevel)处.位于System.Data.Objects.Object上的System.Data.EntityClient.EntityConnection.BeginTransaction()处的System.Data.Objects.ObjectContext.SaveChanges(布局为acceptChangesDuringSave)的Common.DbConnection.BeginTransaction()位于System.Data.Objects.ObjectContext.SaveChanges()处...

这是我在Web.config中的EF配置(带有换行符以便于阅读):

<connectionStrings>
   <add 
      name="FooEntities" 
      connectionString="metadata=res://*/FooDataModel.csdl|
      res://*/FooDataModel.ssdl|
      res://*/FooDataModel.msl;
      provider=System.Data.SQLite;
      provider connection string='data source=C:\domains\myfoosite.com\wwwroot\FooService\Foo.sqlite'"
      providerName="System.Data.EntityClient" />
<connectionStrings>
Run Code Online (Sandbox Code Playgroud)

为什么我收到此错误?为什么数据库是只读的?

我试过的一些事情:

  • 确保Web服务可以写入目录和文件.(我尝试将纯文本文件写入与测试相同的目录.)

  • 我在连接字符串中添加了'read only = False'.

sqlite entity-framework

6
推荐指数
1
解决办法
3423
查看次数

新的扩展WPFToolkit ColorPicker

我一直试图从我的应用程序中的工具包中获取新的颜色选择器,但没有成功......

以下是应该采用窗口背景颜色来填充当前颜色的示例代码,并且在新选择时,应该将背景颜色更改为所选颜色...

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="100" Width="200" xmlns:extToolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit/extended" 
        Name="Window" Background="blue">
    <Grid>
        <extToolkit:ColorPicker Name="colorPicker1" 
                                SelectedColor="{Binding ElementName=Window,Path=Background}" 
                                CurrentColor="{Binding ElementName=Window,Path=Background}" />
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

这是我在彩色标签上找到的所有文档...... http://elegantcode.com/2010/08/15/extended-wpf-toolkit-new-colorpicker-control/

wpf controls

6
推荐指数
2
解决办法
6979
查看次数