我在网络开发商店工作,所以我们自然会处理用户个人资料。在处理我们的某个网站时,我注意到没有“用户”类,这让我觉得奇怪,因为我们肯定有用户。相反,该站点依赖于与DataRows(这是C#)的交互,通过静态方法返回,几乎没有实例化。我问我的老板关于为用户创建一个类,他的回答是,因为对象必须重建得太多,所以通常不值得。
我对Web开发比较陌生,每次重建页面时都必须实例化对象似乎有点浪费,但另一方面我总是发现面向对象的编程很有用。所以我很想知道一些意见,你们在网络开发中使用OOP多少钱?
答案 0 :(得分:13)
我唯一不使用OOP的时间是:
我正在创建一个简单的项目来测试一些逻辑。这通常会导致创建正确的类......
我正在使用经典ASP(曾经有一段时间,感谢上帝)。
我不是在编程。
修改强> 发布上述内容后3年多;我在回答一下。
OOP非常棒,并且允许我们在多个系统与相同数据/逻辑交互时具有极大的灵活性。但是,肯定存在这样一种情况:您不想打扰加载大量对象。也就是说,当您只是为表格显示提取数据时。
查询数据库并获得立即发送到浏览器的简单记录集通常不需要涉及OOP。事实上,您可能想要完全回避OOP,因为表格数据通常涉及其他信息(子记录的总和)的汇总,并且您通常不希望从数据库中提取比实际使用的数据更多的数据。即。如果你只是显示名称和电子邮件,你可能不想获取用户名,因为这只是浪费的周期。
现在,将信息放入数据库通常需要确保遵循某些业务逻辑。例如,用户名遵循某些规则。在这些情况下,利用OOP样式可以使事物更加封装,并且可以在系统之间轻松传输。
所以,看一下这个具体的例子:在提取数据时,我不会打算将数据表交给转发器;但是当我要创建一个新用户或对该用户进行操作以确保正确遵循业务规则时,我会有一个用户类。
答案 1 :(得分:6)
一个问题:数据是否需要与函数/方法调用相结合?如果没有,OOP不是必要。
您最好的方法可能是找到一个空白板,使用面向对象设计创建高级模型,然后使用功能设计创建高级模型,然后使用Procedural创建。您可能会对结果感到惊讶(和其他人)。根据项目的不同,可以使用相同的语言。如@wj所述。 OOP只是一种范例,不要害怕走出你的舒适区域并使用不同的范例进行设计。
花时间设计使用不同的范例也会帮助你接近老板讨论为什么你应该或不应该使用当前的范例。大多数老板会很感激你花了很多时间进行研究,然后才接近他们的想法 - 这并不是说他们会接受你的想法,但是知情的进入可能会让你多花些时间来关注他/她的注意力
恕我直言(不要个人对待),“面向对象编程”已经落入了“Web 2.0”这样的流行语中 - 这是一种不幸的流行语;你现在看到开发人员强迫OOP哪里更适合使用FP或PP。我能给予的最好的专业建议是在多种范式中设计(首先是高水平,然后是潜水)(尽量不要有偏见 - 保持开放的心态)并决定哪一个最能解决您的应用程序的工作方式。在我15年的经验中,75%以上的时间我发现OOP是不必要的,尽管我目前的项目是严格的OOP。
一个更重要/相关的问题是,“面向对象的设计是否在我的当前 Web开发中占有一席之地?”
答案 2 :(得分:3)
OOP 只不过是编程范例 !!但他的重要性在于,实际范式在使用中意味着软件工程中的所有现代知识和最佳实践将遵循这种编程风格表达......
您的案例中的一个很好的例子(网络开发)是Core J2EE Patterns.
(来源:sun.com)
答案 3 :(得分:3)
尽管对象使一些程序员更容易开发,但我已经阅读了如何在没有OOP的情况下构建整个网站的完美示例。不是一盎司。查看名为Clean PHP的20页系列的最后一页:
http://okmaya.com/clean-php/clean-php-step-20/
超级易于遵循,建立整个网站的清洁方式。没有令人困惑的OOP,没有超级嵌套的文件夹,几个小时内没有疯狂的意大利面条代码......只是简单,干净,布局合理的功能,可以满足您的所有需求,而无需使用OOP。此示例包含登录/注册凭据,管理部分(CMS),甚至数据库夹具以帮助您入门,使用mapquest API执行邮政编码/长期查找的搜索功能...我的意思是它有一切对于核心项目或网站。
为什么要用OOP来打扰?干净,结构合理的程序代码非常棒!
关于OOP的主题。我记得另一种时尚,每个人都认为它很酷,每个人都这样做,但后来发现吸烟给你带来了一大堆问题。
坚持简单,坚持你所知道的。成为PHP专家,您再也不必依赖于框架了。不要让我开始使用OOP MVC框架。网络的口译语言从来就不是OOP。 OOP只是增加了另一层复杂性。别懒了。使用您的PHP,并学习如何编程!
另一方面,我可以看到如果没有OOP,在控制台上制作游戏会很困难。但话说回来,苹果是橙子。控制台游戏将其对象保留在内存中,直到游戏退出,或者对象在游戏中被销毁。想一想......为什么他们在每个级别前都有一个加载栏?现在,想象一下每次加载时都必须向您显示加载栏的网页,因为它必须从数据库创建对象。 SLLOOOOOOWWWWW中央!一旦你离开这个页面,你必须重新开始。
网页本身就是应用程序。这就像每次你去起跑线时重建你的拖曳赛车,只是在终点线上把它拆开。 WTFridge?真的吗?嘿,超级天才认为OOP太酷了......把你该死的OOP从我的网站中删除!
简单地说,这是我10年以上的网络开发经验,你知道我们以前用HTML编码页面的时候一个接一个吗?
答案 4 :(得分:1)
当然可以。你(以及更多你的老板)说“重建”就像是一件大事。
“重建”的意思是运行程序。告诉你的老板OOP一般都是愚蠢的,因为即使在桌面环境中,每当有人运行一个软件时,对象都需要重建,所以它甚至都不值得。
答案 5 :(得分:0)
Boss的评论毫无用处。 .net框架由对象组成,没有别的。即使在“经典ASP”中,“响应”也是一个对象 - 如果资源无效,人们为什么会实施它?