aspx页面中的内联代码是一种好习惯吗?

时间:2020-03-05 18:54:55  来源:igfitidea点击:

如果使用以下代码,则无法右键单击后面代码中的变量并对其进行重构(在这种情况下,将其重命名)

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

解决方案

回答

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

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

回答

它被称为意大利面条式代码,许多程序员认为它令人反感……然后,如果我们和公司的其他开发人员认为它可读性和可维护性,我想告诉我们该怎么做。

但是可以肯定的是,使用include可以减少冗余(DRY不要重复自己)

回答

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

回答

我认为有趣的是,更多的asp.net在aspx页面中需要代码。 3.5中的listview,甚至是ASP.NET MVC。 MVC基本上没有任何代码,但是页面中的代码用于呈现信息。

回答

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

回答

如果从模板开发的角度考虑它,那么将其保持在视图中而不是在后面的代码中是明智的。如果需要使用不引人注目的JS从锚点更改为列表项以处理点击该怎么办?是的,这不是最好的例子,而仅仅是那个例子。

我总是尝试考虑是否有设计师(HTML,CSS等),他将要做什么以及在后面的代码中将要做什么,以及我们如何不互相踩脚。

回答

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

像其他所有内容一样,我们可以创建令人讨厌的,无法阅读的意大利面条代码,只是现在我们有了内容标签,而这些标签在设计上并不是世界上可读性最高的东西。

我尝试将大量if模板保留在模板之外,但是过多的封装导致不得不查看13个不同的地方,以了解为什么div x不会触发客户,因此这是一个折衷方案。

回答

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

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

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

总结:内联代码不是一个好习惯,但这是必不可少的。

我的2美分。

回答

通常我会这样使用。

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