7

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

<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,因为它是经过编译和更愿意知道在编译时是否有问题,而不是在运行时。

4

9 答案 9

4

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

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

于 2008-09-16T01:25:32.170 回答
1

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

不过可以肯定的是,使用包含来减少冗余(DRY - 不要重复自己)

于 2008-09-16T01:25:40.113 回答
1

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

于 2008-09-16T02:22:47.010 回答
0

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

于 2008-09-16T01:30:09.320 回答
0

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

于 2008-09-16T02:16:34.483 回答
0

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

我总是试着思考如果我有一个设计师(HTML,CSS,任何东西),我会让他做什么,我会在后面的代码中做什么,以及我们如何不踩到对方的脚趾。

于 2008-09-16T02:33:36.453 回答
0

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

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

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

于 2008-09-16T02:36:41.190 回答
0

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

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

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

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

我的 2 美分。

于 2008-09-16T02:45:23.150 回答
0

通常我是这样使用的。

<a href='<%# DataBinder.Eval(Container.DataItem,"Id",""/Admin/Content/EditResource.aspx?ResourceId={0}") %'>
于 2008-09-16T07:36:00.847 回答