【问题标题】:Am I structuring my Razor app "correctly"?我是否“正确”地构建了我的 Razor 应用程序?
【发布时间】:2020-10-16 08:36:01
【问题描述】:

我正在构建我的第一个剃须刀应用程序,并且想知道我是否以一种好的方式组织了我的文件(如果其他人要查看我的代码会很清楚,并且不会抑制性能)。我主要关心的是我计划在整个应用程序中使用的类库函数。对于那些我一直在“App_Code”文件夹中存储字符串格式化函数等的人——例如,我将以下函数存储在一个类中:

public static decimal? ToDecimal(object? val) => (val is DBNull) ? (decimal?)null : Convert.ToDecimal(val);

此外,我计划使用“Helpers”文件夹来存储需要在整个应用程序中重复的任何 HTML。这些是放置这类东西的正确位置吗?

然后我更大的问题是数据检索/存储。假设我有一个与 SQL 表相关联的“位置”类。如果我使用 EF,检索和存储数据是一个命令,但在我的情况下,我正在编写自己的函数来获取数据。现在我在位置的索引页面上有所有代码(检索所有位置和各种链接文件),但现在我需要在编辑和查看页面上为单个位置重用这些功能。存储这些通用函数(例如 GetLocation(id)、GetAllLocations 等)的正确位置在哪里?只创建一个随机的“库”文件夹并将它们放在一个类中,为我需要与之交互的每个类都有一个专用文件是否有意义?直接扔到 App_Code 里?

最后一个很好的例子是这个函数,我从数据库中检索所有状态。我预计需要在多个页面上执行此操作——我应该将它存储在哪里?

       private void GetStates()
        {
            int id;
            string DbQuery = "SELECT StateId,Abbreviation,StateName " +
                             "FROM [dbo].[State] " +
                             "WHERE RowStatus<>0 ";

            States = new Dictionary<int, State>();
            SqlCommand DbCommand = new SqlCommand(DbQuery, DbConnection);
            SqlDataReader dataReader = DbCommand.ExecuteReader();
            while (dataReader.Read())
            {
                id = Convert.ToInt32(dataReader[0]);
                States.Add(id, new State()
                {
                    StateId = id,
                    Abbreviation = Convert.ToString(dataReader[1]),
                    StateName = Convert.ToString(dataReader[2])
                });
            }

            dataReader.Close();
            DbCommand.Dispose();
        }

【问题讨论】:

    标签: razor razor-pages


    【解决方案1】:

    如果您有 App_Code 文件夹,则您有一个 ASP.NET 网页应用程序,而不是 Razor Pages 应用程序,因为此问题已被标记。 Web Pages 是一个多年未见任何更新的旧框架,它基于旧的 .NET Framework 网站项目类型,而不是需要在部署前编译的 Web 应用程序项目类型。

    所有 C# 代码都必须放在 App_Code 文件夹或单独的类库中,这些类库必须手动添加到 bin 文件夹中。简而言之,如果您关心代码组织(或者如果您还关心性能、跨平台部署、框架更新、可扩展性、测试等),ASP.NET 网页不是一个好的选择。您应该查看 Razor Pages:https://www.learnrazorpages.com/razor-pages/tutorial/bakery

    【讨论】:

    • 我实际上是自己手动添加了 App_Code 文件夹,正如我在其他 Stack Overflow 问题上看到的那样,很高兴知道这不是正确的方法!我肯定在做一个剃须刀项目模板——还有其他地方可以存储这些功能吗?我已经阅读了 Razor 的主要 Microsoft 教程,但没有看到我在帖子中提到的那种东西,除了标签助手(我认为这不适用于我放入 App_Code 的函数,也到 SQL 数据库的东西)。
    • 放置类文件的位置在技术上没有区别。整个应用程序编译为单个 DLL。将类似的类分组到适当命名的文件夹中总是一个好主意,但您如何称呼这些文件夹取决于您自己。没有这样的“最佳实践”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多