如果我使用以下代码,我将失去右键单击后面代码中的变量并重构(在本例中重命名)的能力
<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,因为它编译并且更喜欢知道某些东西在编译时是否被破坏,而不是运行时。
答案 0 :(得分:4)
我不会把它称为不好的做法(有些人不同意,但为什么他们首先给我们这个选项?),但我会说,如果你不接受这种做法,你将提高整体可读性和可维护性。您已经传达了一个好点,那就是IDE功能限制(即设计时检查,编译时警告等)。
我可以继续讨论它违反了多少原则(代码重用,关注点分离等),但我可以想到许多应用程序几乎打破了所有原则,但几年后仍然有效。我是一个人,更喜欢让我的代码尽可能模块化和可维护。
答案 1 :(得分:1)
它被称为意大利面条代码,许多程序员发现它令人反感......然后,如果您和您公司的其他开发人员发现它可读和可维护,我该告诉您该怎么做。
可以肯定的是,使用包括减少冗余(干 - 不要自己重复)
答案 2 :(得分:1)
我偶尔使用它,通常是出于特殊原因。我将永远是一个更快乐的开发人员,我的代码完全与我的HTML标记分开。这有点偏爱,但我认为这是一种更好的做法。
答案 3 :(得分:0)
这取决于你。有时“spagehetti”代码比构建/使用完整的模板系统更容易维护,但是一旦你得到相当复杂的页面,或者更具体地说,一旦你开始在页面本身包含大量逻辑,它就会得到脏得很快。
答案 4 :(得分:0)
我认为有趣的是,更多的asp.net需要aspx页面中的代码。 3.5中的listview,甚至是ASP.NET MVC。 MVC基本上没有代码,但是页面中的代码用于呈现信息。
答案 5 :(得分:0)
如果从模板开发的角度考虑它,那么将它保留在视图中是明智的,而不是在后面的代码中。如果需要使用不显眼的JS从锚点更改为列表项来处理点击,该怎么办?是的,这不是最好的例子,而只是那个例子。
我总是试着考虑一下我是否有一个设计师(HTML,CSS,任何东西),我会让他做什么以及我将在后面的代码中做些什么,以及我们如何不踩对方的脚趾。
答案 6 :(得分:0)
如果你不能很好地封装它,它只是一种不好的做法。
与其他所有内容一样,您可以创建令人讨厌的,难以理解的意大利面条代码,除非您现在有内容标签,这些标签在设计上并不是世界上最易读的内容。
我试着保留大量的if模板,但是过多的封装,导致必须查看13个不同的地方,看看为什么div x没有向客户端开火,所以这是一个权衡。
答案 7 :(得分:0)
不是,但有时它是必要的邪恶。
以您的情况为例,虽然代码背后似乎有更好的关注点分离,但问题在于它可能无法像您希望的那样清楚地区分问题。通常当我们执行代码后面的代码时,我们不会在MVC框架中构建应用程序。代码背后的代码也不容易维护和测试,至少在与MVC比较时。
如果您正在构建ASP.NET MVC应用程序,那么我认为您肯定会遇到内联代码。但是建立MVC模式是可维护性和可测试性方面的最佳方式。
总结:内联代码不是一个好习惯,但它是一个必要的邪恶。
我的2点。
答案 8 :(得分:0)
通常我会这样使用。
<a href='<%# DataBinder.Eval(Container.DataItem,"Id",""/Admin/Content/EditResource.aspx?ResourceId={0}") %'>