【问题标题】:Windows Forms application "design"Windows 窗体应用程序“设计”
【发布时间】:2009-01-18 11:46:03
【问题描述】:

我正计划编写一个“中等大小”的 WinForms 应用程序,我将使用 C#、.NET 3.5 编写该应用程序。我有一些“通用设计问题”,希望在这里得到解决。

  1. 一般的异常处理。处理异常的最佳方法是什么?到处使用 try/catch 块? this?
  2. 本地化。如果我想在我的应用程序中支持多种语言,我应该使用什么?我发现“卫星程序集”是一个非常...嗯,“笨重”的解决方案 - 我不想要资源文件“地狱”,我不想在 VS UI 中输入翻译。
  3. 在本地存储数据。以前,我在一个项目中使用过System.Data.SQLite,但我发现自己想知道是否还有其他需要考虑的地方。
  4. 还有什么需要注意的吗?

谢谢(?)

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    1) 不要捕获任何异常。他们中的绝大多数会告诉您代码中的错误,您会想立即了解它们。如果在测试和部署期间,您发现您认为可以处理的错误情况(它们并不多),您可以随时添加 try/catch 块。如果您计划处理异常,请确保在代码中随意使用 try/finally 块,以便保留类的状态,即使存在阻止清理代码运行的异常。使用 try 而不使用 catch 没有明显的成本。

    2) 附属组件并不笨重。只是部署文件夹子目录中的一个小 DLL。不需要特殊代码,一切都是自动的。最重要的是,它是一个标准解决方案。您可以将 .resx 文件发送到本地化服务,他们将使用标准工具(如 Winres.exe)为您提供翻译。要求他们处理定制的东西会很昂贵,而且可能很麻烦。

    3) 替代方案是 SQL Server CE(与 SQLite 相同的方法)和 SQL Server Express。后者为您带来最大的收益,但必须安装。这并不难。

    4) 这取决于您的目标受众,但如果外观是购买决定的一个因素,请聘请 UI 设计师。他/她会捕捉到 UI 的花絮,让它看起来很漂亮。

    【讨论】:

      【解决方案2】:
      #1 - 如果您关心应用程序的性能,请避免尝试/捕获。使用一些分析器,例如来自 RedGate 的分析器(ANTS - 可悲的是它不是免费软件)来亲自查看 try/catch 块消耗大量 CPU 时间,尤其是在需要跳入“catch”时。只是尝试找到任何其他方法,.net 有很多其他方法可以用来使支持不会发生异常,我知道使用 try/catch 更容易,但决定你的目标是什么。

      #2 - 我猜你可以使用与你的应用程序一起编译的资源文件,所以如果你要问的话,你不会有任何单独的文件?

      #3 - 我真的必须回答那个:),我个人认为没有比使用 XML 更好/更舒适的本地存储数据的方式,正如之前提到的,你可以使用 LINQ to XML 来查询这个文件,这非常简单。它体积小、速度快、易于创建、维护,更重要的是,您可以通过 Internet 发送它,而不会出现使用其他存储数据方式(例如防火墙或任何 ISD)可能出现的任何问题,因为它基本上是一个文本文件。我只是喜欢xml。

      那有帮助吗?

      【讨论】:

      • try/catch 如果正确使用它不会消耗任何东西,例如在许多情况下 xml 不是一个选项 - 大型数据集或并发场景
      • "防火墙或任何 ISD 都不会成为问题,因为它基本上是一个文本文件。"事实上,XML 通常通过端口 80 发送,这使得它不太可能在途中被阻止,而不是内容类型。
      【解决方案3】:

      关于第一个问题 - 查看Enterprise Library 异常处理块。 Microsoft 在提供解决此问题的文档和代码方面做得很好。

      关于其他问题(尤其是#4),在不了解您的应用程序细节的情况下很难推荐一些东西。

      【讨论】:

        【解决方案4】:

        对于第一个问题,我的答案与 aku 几乎相同,您可能想看一下 Enterprise Library,因为有几个有用的块,例如 Logging 和 Validation 块。

        第二个我帮不上忙,因为我没有参与过任何需要支持任何类型本地化的项目。

        如果不更好地了解您正在开发的数据/应用程序类型,就很难推荐本地数据存储。我有几个想法(没有特别的顺序)是:

        1. Xml 文件是可移植的,可以使用 LINQ->XML 进行操作。
        2. 您的对象稳定吗?你总是可以序列化它们....(虽然我不推荐这样做)
        3. 虽然现在是本地数据,但将来是否可以更好地在服务器上与其他用户共享数据(部分或全部)。
        4. 您提到了 SQLite,您是否考虑过 SQL Server CE?
        5. 您的数据层需要支持什么样的查询性能?

        【讨论】:

          【解决方案5】:
          1. 如前所述,异常处理块
          2. 没有做太多的本地化,但是 VS 2008 中的资源处理很多 优于 VS 2003
          3. SQL Server Compact Edition, VistaDBCodegear Blackfish 是您的产品 可能会调查。 SQL CE 是免费的 但是其他的要花钱

          【讨论】:

            【解决方案6】:

            为什么不下载 Visual C# 2005 或 2008 Express Edition? 设计很简单

            1. 打开 Visual C#
            2. 打开创建
            3. 打开创建项目对话框
            4. 设计它
            5. 编码
            6. 发布它

            Download 2005 ->

            Download 2008 ->

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-03-23
              相关资源
              最近更新 更多