我是新手,所以请耐心等待.我最近在几个项目中使用过一个MVC框架,过了一段时间,我对MVC中"模型"的感知功能感到失望.
我得到了控制器和视图的有用性,我知道表示和逻辑之间的分离对于使代码在未来更易于维护是很重要的,尽管不一定更快或更强大.
如果首先将所有逻辑放在控制器内部,我看不到Model的任何用途,尤其是Active-Record.我们已经有了一种非常强大且易于使用的语言来与数据库进行通信,对吗?它叫做SQL.对于我来说,当实现模型像活动记录时,它的用处取决于您是否希望您的应用程序适合多个数据库.
所以我要问的是,如果你只使用一个数据库,为什么还要使用模型和Active-Records呢?为什么不只使用SQL?为什么额外的复杂层?你们有没有任何案例研究/现实生活中的故事,其中模型实际上可以比仅使用数据库类和SQL-away更好地做事情?
再一次,如果我似乎如此无知,我很抱歉,但我真的不知道为什么模型很重要.谢谢回答.
在一种语言中(因为我现在正在使用它)PHP,它支持程序和面向对象的范例.
确定哪种范例最适合新项目是否有一个很好的经验法则?如果没有,你怎么能做出决定?
组件驱动开发术语开始被广泛使用,尤其是 与控制反转有关.
我刚刚开始学习J,这非常有趣,但我想知道它是什么样的语言,与常见的范例和分类有关.例如,您可以说F#是强类型的,主要是功能性的(它支持OO和过程编程,但它被认为是"功能")语言属于ML族.然而,对于J,我找不到很多关于如何"按常规"对其进行分类,或者在Stackoverflow上找到任何确认它是函数式编程语言的东西.维基百科称它"是一种非常简洁的数组编程语言","支持函数级编程","不是冯·诺依曼编程语言",其中没有一种更有用.
我有一些问题:
J/K/APL属于哪种主要范式(程序性,OO,功能性,逻辑性)?如果他们的范例只是"阵列编程",那么这种范式是什么样的,或者最相似的呢?
什么知名的编程语言是J/K/APL最相似的?例如,我猜他们就像Lisp,因为它们在数组(列表)上运行,并且具有最小的,没有逗号语法.
我只是想根据我已经知道的东西将这些语言分类.谢谢.
language-agnostic paradigms haskell functional-programming j
比较两种技术的优点/缺点是什么?更重要的是:为什么以及何时应该使用另一个?这只是个人品味/偏好的问题吗?
尽我所能,我还没有发现另一篇明确解决我的问题的帖子.关于多态性和/或类型擦除的实际使用的许多问题中,以下似乎最接近,或者看起来如此,但它并没有真正解决我的问题:
请注意,我非常了解这两种技巧.为此,我在下面提供了一个简单,独立的工作示例,如果感觉不必要,我很乐意删除.但是,这个例子应该澄清这两种技术对我的问题意味着什么.我对讨论命名法不感兴趣.此外,我知道编译和运行时多态性之间的区别,但我不认为这与该问题相关.请注意,如果有的话,我对性能差异的兴趣会减少.但是,如果根据表现有一个引人注目的争论,我很想读它.特别是,我想听听具体的例子(没有代码),这些例子实际上只适用于这两种方法中的一种.
查看下面的示例,一个主要区别是内存管理,多态性保留在用户端,而类型擦除则整齐地隐藏起来,需要一些引用计数(或增强).话虽如此,根据使用场景,可以通过使用带有向量(?)的智能指针来改善多态性的情况,但对于任意情况,这可能很难变得不切实际(?).可能有利于类型擦除的另一个方面可能是公共接口的独立性,但为什么这将是一个优势(?).
通过简单地将以下所有代码块放入单个源文件中,使用MS VisualStudio 2008测试(编译和运行)下面给出的代码.它也应该在Linux上用gcc编译,或者我希望/假设,因为我认为没有理由不(?):-)为了清楚起见,我在这里拆分/分割代码.
这些头文件应该足够了,对(?).
#include <iostream>
#include <vector>
#include <string>
Run Code Online (Sandbox Code Playgroud)
简单的引用计数以避免增强(或其他)依赖性.此类仅用于下面的类型擦除示例.
class RefCount
{
RefCount( const RefCount& );
RefCount& operator= ( const RefCount& );
int m_refCount;
public:
RefCount() : m_refCount(1) {}
void Increment() { ++m_refCount; }
int Decrement() { return --m_refCount; }
};
Run Code Online (Sandbox Code Playgroud)
这是简单的类型擦除示例/插图.它的复制和修改部分来自以下文章.主要是我试图让它尽可能清晰明了. http://www.cplusplus.com/articles/oz18T05o/
class Object {
struct ObjectInterface {
virtual ~ObjectInterface() {}
virtual std::string GetSomeText() const = 0;
};
template< typename T > struct ObjectModel : ObjectInterface {
ObjectModel( const T& …Run Code Online (Sandbox Code Playgroud) 当我第一次阅读Web标准课程中不引人注目的JavaScript原理时,我认为这是一件非常棒的事情.
不引人注目的JavaScript更像是一种编程哲学,而不是一种技术.到目前为止,它最重要的组件是清楚地了解哪个功能属于哪个层.所有绝对关键的网站功能都应该用纯HTML编码,但是一旦你创建了这个基础,就可以在基础之上添加一个JavaScript层,以便为支持它的浏览器提供更好,更清晰,更快速的界面.
此外,不引人注目的JavaScript:
分离结构和行为,以使您的代码更清晰,脚本维护更容易
抢占浏览器不兼容性
使用干净的语义HTML层
对于我目前的项目,我使用这种方法.当我把JavaScript关闭以进行其他一些我必须做的工作时,我很惊讶有多少网站在没有JavaScript的情况下完全被破坏:缺少功能,以及缺少很多重要信息,这些信息根本不存在DOM.
这些特别是社交网站.这种情况应该不足为奇,所需的开发时间和用户体验可能比可访问性更重要.
我仍在问自己,不引人注目的JavaScript是不是已经过时了.我的意思是哪个浏览器本身不支持JavaScript?它仍然是适合2012年的方法吗?我开始怀疑它.
我只是在寻找将Self与Smalltalk区分开来的原因.
这不应该是大猩猩与鲨鱼的问题.我不是在找一个更好的理由,我只是把一个定义为与另一个不同的东西感到困惑.在阅读了大约2个小时后,它们对我来说似乎都是同一种语言,并且用一些代码捣乱(旁白:我终于理解了Smalltalk版本的"Everything is a object".我必须说,它真是太棒了.哈哈!我认为C#已经钉了......但它甚至没有接近这个!XD)
我在某个地方读过的随机内容,过去几年的某个时间:
我最近买了Scala编程,并一直在阅读它.语言肯定不是我的预期!具体来说,除了Lisp宏和Haskell的类型级别副作用隔离之外,它似乎实现了我所知道的几乎所有编程语言的想法.
坦率地说,它让我有些不知所措.虽然我认为拥有这么多工具很好,但我真的只是在JVM上寻找一种强类型的函数式语言.我想我可能会以这种方式使用Scala,但我想如果我与任何库交互或通过其他人的代码,我会遇到很多这种高级(对我而言)OOP的东西 - 特征和"对象层次结构"线性化,"所有这些抽象和重要的业务,单例,包和伴随对象,隐式转换......更不用说各种语法快捷方式和糖.
人们经常哀叹那些试图将一种语言的风格转变为另一种语言的程序员,原因很多.但并非所有语言都像Scala一样具有多范式,所以也许它的社区有不同的看法?例如,在F#中,编程风格和使用的OOP似乎有一些余地.但是从阅读中我不确定这对Scala来说是否也是一个好的哲学.
更有经验的Scala程序员可以帮助我吗?为清晰起见编辑:基本上,我可以安全地使用Scala的FP功能而不用担心其高级OOP方面吗?
抱歉这个漫无边际的问题!
paradigms programming-languages functional-programming scala jvm-languages
我开始在高中学习java和python,我想我总是学习OOP,没有别的我的问题是什么是OOP旁边的其他编程范例或编程语言类型?
Rich Hickey在他的简单轻松谈话中描述了Clojure和Haskell的范例.作为一个ruby/rails程序员(这是我真正知道的),我喜欢他的想法,但不理解其中的两个:
改为使用队列
显然,在Rails中我们喜欢方法链接,但是我想要了解Ruby中的Queue在他描述它的方式(54:54在视频中):
如果事物A调用事物B,那么你只需要它.你有什么时间和地点.A必须知道B在哪里才能调用B.当发生这种情况时,无论什么时候发生都是在A做的时候.在那里贴一个队列.
规则与条件
他谈到不使用条件或切换语句而是使用规则(30:00在视频中).
对于Ruby来说,我根本就不了解.如何在不使用条件的情况下做出决定?
谢谢大家,贾斯汀
paradigms ×10
oop ×3
haskell ×2
architecture ×1
c++ ×1
clojure ×1
components ×1
j ×1
javascript ×1
php ×1
procedural ×1
ruby ×1
scala ×1
selflanguage ×1
smalltalk ×1
web ×1