Winforms - 最佳目录/项目结构

9
希望了解各位对于如何组织目录和项目结构以及在winforms C#应用程序中的最佳实践。大多数人都认为最好将视图、业务逻辑、数据对象和接口分开,但想知道不同的人如何处理这一点。此外,将第三方依赖项隔离到实现项目中,然后有接口导出项目供消费者引用。
以下是项目结构:
  • View.csproj
  • BusinessLogic.csproj
  • Data.csproj
  • CalculatorService.Exported.csproj (接口)
  • CalculatorService.MyCalcImpl.csproj (一个实现)
  • CalculatorService.MyCalcImpl2.csproj (另一个实现)
    在文件夹结构方面,嵌套哪种更好:
    Interfaces ---IFoo ---IData Impl ---Foo ---Data
    或者
    Product ---Interfaces/IProduct ---Impl/Product Foo ---Impl/Foo ---Interfaces/IFoo
    所有这些都试图推动对抽象的解耦依赖,并快速更改实现。
    你有什么想法?最佳实践?
  • 3个回答

    8

    有点晚的答案,但我也来发表一下看法。

    我个人一直在使用基于实际项目类型的文件夹。例如:

    - Project
        + Forms
        + Classes
        + UserControls
        + Resources
        + Data
    

    所以最终我得到了:
    new Forms.AboutForm().ShowDialog();
    Controls.Add(new Controls.UberTextBox());
    

    8

    对我来说,这取决于我正在遵循的模型。如果我正在使用MVC模式,那么就会是:

    Project
    -Models
    -Controllers
    -Views
    

    对于MVP来说,它将是:
    Project
    -Models
    -Presenters
    -Views
    

    在我的观点中,我将它们分成与控制器相关的命名空间,例如,如果我有一个控制器来处理库存交易,我可能会将其设置为

    Project
    -Models
    --Inventory
    -Controllers
    --Inventory
    ---TransactionsController.cs
    -Views
    --Inventory
    ---Transactions
    ----EditTransactionsView.dfm
    

    对于接口,我将接口放在与实现相同的目录中。


    0

    通常我们会将SourceSafe项目、项目名称、命名空间和目录结构保持同步。

    例如,假设我们公司名为XCENT,则App1的SourceSafe结构和相应的目录结构如下:

    \XCENT
    \XCENT\App1
    \XCENT\App1\UI
    \XCENT\App1\UI\Test //test harness for UI
    \XCENT\App1\Data
    \XCENT\App1\Data\Test //test harnesses for Data
    

    等等。

    UI项目名为XCENT.App1.UI.cproj,该命名空间内的类为XCENT.App1.UI。

    我们还为许多客户工作,因此专门为他们工作的前缀是他们的名称。例如:Client1\App1\UI,等等。

    我们公司的每个人都使用相同的约定,很快就能明确每个东西的位置。

    如果有必要进一步分割逻辑空间,我们会这样做。这种其他分割包括.Export、.Import、.Reporting、.Security等。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接