【问题标题】:Is inline code in your aspx pages a good practice?您的 aspx 页面中的内联代码是一种好习惯吗?
【发布时间】:2010-09-09 06:30:04
【问题描述】:

如果我使用以下代码,我将无法右键单击后面代码中的变量并重构(在本例中为重命名)它们

<a href='<%# "/Admin/Content/EditResource.aspx?ResourceId=" + Eval("Id").ToString() %>'>Edit</a>

我到处都能看到这种做法,但对我来说这很奇怪,因为如果我更改属性名称,我将不再能够获得编译时错误。 我的首选方法是做这样的事情

<a runat="server" id="MyLink">Edit</a>

然后在后面的代码中

MyLink.Href= "/Admin/Content/EditResource.aspx?ResourceId=" + myObject.Id;

我真的很想知道人们是否认为上述方法更好,因为这是我经常在流行的编码网站和博客(例如 Scott Guthrie)上看到的,而且它的代码更小,但我倾向于使用 ASP.NET,因为它已编译,并且希望在编译时而不是运行时知道是否有问题。

【问题讨论】:

    标签: asp.net coding-style


    【解决方案1】:

    我不会将其称为不好的做法(有些人会不同意,但为什么他们一开始就给了我们这个选项?),但我想说,如果你不接受这种做法,你会提高整体的可读性和可维护性.您已经传达了一个很好的观点,那就是 IDE 功能限制(即设计时检查、编译时警告等)。

    我可以继续讨论它违反了多少原则(代码重用、关注点分离等),但我可以想到许多应用程序几乎违反了所有原则,但几年后仍然有效。一方面,我更喜欢让我的代码尽可能模块化和可维护。

    【讨论】:

    • “但是他们为什么一开始就给我们这个选项呢?”因为 ASP 3.0 就是这样做的?我们在 C# 上使用 VB.NET 单板是有原因的;微软 [经常] 非常重视向后兼容性和维护以前的心理模型。正如您正确指出的那样,能够编写类似 ASP 3 的代码并不一定是个好主意!
    【解决方案2】:

    它被称为意大利面条代码,许多程序员认为它令人反感……再说一次,如果您和您公司的其他开发人员发现它可读且可维护,我该告诉您该怎么做。

    当然,使用包含来减少冗余(DRY - 不要重复自己)

    【讨论】:

      【解决方案3】:

      我只是偶尔使用它,通常是出于某种特殊原因。我将永远是一个更快乐的开发人员,我的代码完全与我的 HTML 标记分离。这在某种程度上是个人喜好,但我会说这是一种更好的做法。

      【讨论】:

        【解决方案4】:

        这取决于你。有时“spagehetti”代码比为简单的事情构建/使用完整的模板系统更容易维护,但是一旦你得到相当复杂的页面,或者更具体地说,一旦你开始在页面本身中包含很多逻辑,它就可以得到脏得真快。

        【讨论】:

          【解决方案5】:

          我认为有趣的是更多的 asp.net 需要在 aspx 页面中的代码。 3.5 中的列表视图,甚至是 ASP.NET MVC。 MVC 基本上没有代码背后,而是页面中的代码来呈现信息。

          【讨论】:

            【解决方案6】:

            如果您从模板开发的角度考虑它,那么将其保留在视图中而不是隐藏在代码中是明智的。如果需要使用不显眼的 JS 将锚点更改为列表项来处理点击怎么办?是的,这不是最好的例子,而仅仅是那个例子。

            我总是试着思考如果我有一个设计师(HTML、CSS 等),我会让他做什么,我会在后面的代码中做什么,以及我们如何不互相踩踏脚趾。

            【讨论】:

              【解决方案7】:

              如果你不能很好地封装它,它只是一个不好的做法。

              像其他一切一样,您可以创建令人讨厌的、不可读的意大利面条代码,但现在您可以使用标签来满足需求,而这些标签在设计上并不是世界上最易读的东西。

              我尝试将大量 if 保留在 hte 模板之外,但过度封装导致不得不查看 13 个不同的地方以查看为什么 div x 没有向客户端触发,因此这是一种权衡。

              【讨论】:

                【解决方案8】:

                它不是,但有时它是一种必要的邪恶。

                以你的例子为例,虽然后面的代码似乎有更好的关注点分离,但它的问题是它可能无法像你希望的那样清楚地分离出关注点。通常,当我们编写代码背后的东西时,我们并不是在 MVC 框架中构建应用程序。无论如何,代码背后的代码也不容易维护和测试,至少与 MVC 相比是这样。

                如果您正在构建 ASP.NET MVC 应用程序,那么我认为您肯定会被内联代码所困扰。但就可维护性和可测试性而言,以 MVC 模式构建是最好的方法。

                总而言之:内联代码不是一个好习惯,但它是一种必要的邪恶。

                我的 2cents。

                【讨论】:

                  【解决方案9】:

                  我一般都是这样用的。

                  <a href='<%# DataBinder.Eval(Container.DataItem,"Id",""/Admin/Content/EditResource.aspx?ResourceId={0}") %'>
                  

                  【讨论】:

                    猜你喜欢
                    • 2011-03-02
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-02-21
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-09-12
                    • 2021-12-10
                    相关资源
                    最近更新 更多