.NET, Software Design, 存档

通宵软件设计提示: 提示 #2

Jason / 十二月 20, 2008

对于《四夜的软件设计提示》的第二部分, 我想谈一些关于异常的问题。. net 中的异常提供了处理错误的绝佳方法。我们都知道不要使用异常来控制流, 但还有许多其他方法可以滥用异常。

滥用异常可以是任何东西, 从引发基本异常类, 到抛出的不仅仅是异常。但最常见的滥用异常处理的方法是简单地压制它们。我们都看到了一些应用程序, 它们执行类似于以下操作:

某业务对象 bo = SomeBusinessObject.LoadWithId(4);
尝试 {
    博。值 = int。分析 (txt text领域. text);
} 捕获 {
   值不是 int..。所以忽略它。
}
博。保存 ();

抑制异常的问题在于, 大多数组件并不只是为了好玩而抛出异常, 因此首先引发异常的一些根本原因。

上面的例子看起来足够无辜。int32 的 parse 方法如果无法解析输入字符串, 则会引发异常。但是, 如果将来另一个开发人员认为业务对象的 "某种价值" 需要某种限制可接受值的业务规则, 该怎么办?

公共类某些业务对象 { 其他类代码 公共 int 某些值 { 获取 {返回 _ 某个值;} 集 { 如果 (值< 0)></ 0)> 引发新的业务规则异常 ("某些值的无效值"); _ 值 = 值; } } } read more

.NET, 存档

在. net 2.0 下运行 codesmith 2。6

Jason / 十二月 12, 2008

codesmith 是我时不时才拿出的工具之一, 但当我这样做的时候, 它真的派上用场。由于我对 codesmith 的使用相当有限, 我发现 codesmith 的免费软件版本正好满足了我的需求。

因此, 不用说, 当我开始 codesmith 看到一条错误消息, 通知我它需要. net 1.1 操作时, 我感到很失望。明智的做法本来是安装. net 1.1, 但这似乎是一个很大的麻烦, 因为我 (否则) 没有使用. net 1.1。我知道应用程序将尝试在没有1.1 的情况下在. net 2.0 下执行, 除非明确指示它不要这样做, 因此我开始查找阻止它运行的原因。

我首先转到 CodeSmith.exe.config 文件, 在那里我看到:

<startup></startup> <supportedRuntime version="v1.1.4322"></supportedRuntime> <supportedRuntime version="v1.0.3705"></supportedRuntime> <requiredRuntime version="v1.0.3705"></requiredRuntime> read more

.NET, C#, 存档

. net 扩展方法

Jason / 十二月 1, 2008

从. net 3.5 启动是一种称为扩展方法的功能。扩展方法允许开发人员使用自己的实例方法扩展类。这是一个在其他语言中通常称为 "混战" 的概念。以下面的一段代码为例。在上面, 简单地说, 我们看到一个帮助器类, 它有一个静态方法来确定是一个字符串是 "短" 的。虽然这个例子很荒谬, 但它有助于说明扩展方法的根本愿望。通常情况下, 我们的源代码中到处都是与上面非常相似的帮助器类。在您的代码周围也到处都是此类实用程序类的用法。因此, 例如, 您将使用如下的用法:. net 3.5 中的扩展方法为上述内容提供了语法快捷方式。要将我们的 isshort 函数更改为 system. string 前缀的扩展到参数列表中。这就是将普通帮助器方法转换为. net 3.5 中的扩展方法所需的全部。但是, 有一些规则需要记住扩展方法。 read more

.NET, Software Design, 存档

gdi + 中出现的一般错误

Jason / 十月 14, 2008

您知道, 当应用程序崩溃时, 您做得很好, 但有一个例外, 如 "gdi + 中发生了一般错误"。这是关于, 以及通用, 因为它得到:-)

在我的特殊情况下, 我正在使用 fromstream 方法在我的 dao 中构建一个图像, 如下所示:

图像结果;
使用 (filestream 文件 = file. openread (文件名)) {
	结果 = 图像. fromstream (文件);
	文件。关闭 ();
}
返回结果;

我这样做是为了让我知道一个事实, 即文件被正确处置。我不想有任何孤立的文件引用锁定该文件的情况下, 我需要删除它。

问题是, 在我的 ui 中, 我试图调用 image 上的 save 方法, 将其内容转储到 asp. net 响应流, 如下所示:

Img。保存 (HttpContext.Response.OutputStream, imageforma. jpeg); read more

.NET, C#, 存档

银灯进度条

Jason / 十月 13, 2008

silverlight 2 为创建丰富的互联网应用程序提供了一个有吸引力的平台, 然而, 当第一次开始布局模型的怪癖和某些控件和类的奇怪的缺乏和令人费解。

银光工具箱中的一个令人费解的缺失是进度条控件。wpf 有一个进度条, wypforms 有一个进度条, 但没有 silverlight。幸运的是, 实现一个并没有那么难, 并提供了一个很好的介绍银光的布局模型。

银光和层数

与 asp. net 和许多其他形式技术不同, silverlight 使用多层定位系统。"布" 控件对于允许对多个控件进行分层特别有用。

以这个简单的 xaml 块为例:

<Canvas x:name="LayoutRoot" background="WhiteSmoke"></Canvas> <Rectangle width="60" height="60" fill="Green"></Rectangle> <Rectangle width="60" height="60" fill="Gray"></Rectangle> <Rectangle width="60" height="60" fill="LightBlue"></Rectangle> read more

.NET, ASP.NET, aspNETserve, C#, 存档

社区编码竞赛

开发开源项目是一次非常有益的经历。但遗憾的是 (作为开源开发人员) 开源项目很少得到他们应得的反馈。通常, 开发人员只有在软件被破坏时才会听到用户的反馈, 正因为如此, 往往很难知道作者的作品何时才会得到真正的欣赏。 read more