面向对象设计(OOD)结合了数据及其方法.据我所知,这实现了两件好事:它提供了封装(所以我不关心那里有什么数据,只关心我如何得到我想要的值)和语义(它将数据与名称联系起来,以及它方法始终如一地使用数据.
那么OOD的优势在哪里呢?相反,函数式编程将丰富性归因于动词而不是名词,因此封装和语义都是由方法而不是数据结构提供的.
我使用的是一个处于功能末端的系统,并且不断地用于OO的语义和封装.但我可以看到OO的封装可能成为对象灵活扩展的障碍.所以目前,我可以看到语义更强大.
或封装是所有有价值代码的关键?
编辑:我的意思是OO提供的封装类型.changeColor(door,blue)成为door.changeColor(blue).
language-agnostic oop encapsulation functional-programming semantics
我有一个项目,在运行时需要特定对象的用户定义属性(让我们说这个例子中的人物对象).该项目将有许多不同的用户(1000 +),每个用户为他们自己的'Person'对象集定义他们自己的唯一属性.
(例如 - 用户#1将具有一组已定义的属性,这些属性将应用于此用户拥有的所有人对象.多达1000个用户,这是应用程序将使用的最低用户数.)这些属性将用于查询people对象并返回结果.
我认为这些是我可以使用的可行方法.我将使用C#(以及任何版本的.NET 3.5或4),并且有一个免费的统治:用于数据存储的内容.(我有mysql和mssql可用,虽然可以自由使用任何软件,只要它符合要求)
我的评估中是否遗漏了任何错误或做出了错误的假设?
在这些选择中 - 你会选择什么样的解决方案?
混合EAV对象模型.(使用常规关系模型定义数据库,并为Person表创建一个'property bag'表).
缺点:每个/查询有很多连接.表现不佳.可以达到查询中使用的联接/表数量的限制.
我已经敲了一个快速的样本,它有一个Subsonic 2.x'esqe接口:
Select().From().Where ... etc
Run Code Online (Sandbox Code Playgroud)
这会生成正确的连接,然后过滤+转动c#中返回的数据,以返回使用正确类型的数据集配置的数据表.
我还没有加载测试这个解决方案.它基于Microsoft白皮书中的EA建议: SQL Server 2008 RTM文档用于性能和可伸缩性的语义数据建模的最佳实践
允许用户在运行时动态创建/更改对象的表.这个解决方案就是我认为NHibernate在使用动态属性时在后台做的事情,如下所述
http://bartreyserhove.blogspot.com/2008/02/dynamic-domain-mode-using-nhibernate.html
缺点:
随着系统的增长,定义的列数将变得非常大,并且可能会达到最大列数.如果有1000个用户,每个用户的"人"对象有10个不同的属性,那么我们需要一个包含10k列的表.在这种情况下不可扩展.
我想我可以允许每个用户使用一个人属性表,但是如果有1000个用户可以启动,那么应用程序中有1000个表加上另外10个用户.
我不确定这是否可扩展 - 但似乎并非如此.如果我不对,请有人纠正我!
使用NoSQL数据存储区,例如CouchDb/MongoDb
根据我的阅读,这些尚未在基于字符串的大型应用程序中得到证实,并且处于开发阶段的早期阶段.如果我在这次评估中不正确,有人可以告诉我吗?
使用people表中的XML列来存储属性
缺点 - 没有查询索引,因此需要检索和查询每一列以返回结果集,从而导致查询性能较差.
将对象图序列化到数据库.
缺点 - 没有查询索引,因此需要检索和查询每一列以返回结果集,从而导致查询性能较差.
berkelyDB的C#绑定
从我在这里读到:http://www.dinosaurtech.com/2009/berkeley-db-c-bindings/
Berkeley Db肯定证明是有用的,但正如Robert指出的那样 - 没有简单的界面.您的整个wOO包装器必须手动编码,并且所有索引都是手工维护的.它比SQL/linq-to-sql困难得多,但这是你为荒谬的速度付出的代价.
似乎有很大的开销 - 但是如果有人能够提供关于如何在C#中维护索引的教程的链接 - 它可能是一个观众.
SQL/RDF混合.奇怪我以前没想过这个.与选项1类似,但不是"属性包"表,只是XREF到RDF商店?查询将涉及两个步骤 - 查询RDF存储以查找正确属性的人员,返回人员对象,并在SQL查询中使用这些人员对象的ID来返回关系数据.额外的开销,但可能是一个观众.
阅读文章对<article>HTML5的标签,我真的觉得我最大的困惑是在本节的第一个问题:
使用
<article>为内容提供了更多的语义含义.相比之下<section>,只是一个相关内容块,并且<div>只是一个内容块...要确定这三个元素中的哪一个是合适的,请选择第一个合适的选项:
- 内容在Feed阅读器中是否有意义?如果是这样,请使用
<article>.- 内容是否相关?如果是这样,请使用
<section>.- 最后,如果没有语义关系,请使用
<div>.
所以我想我的问题是:饲料阅读器中有哪些类型的内容?
我试图找到与单个单词相关的单词(特别是物理对象).例如:
网球:网球拍,网球,网球鞋
斯诺克:斯诺克球杆,斯诺克球,粉笔
国际象棋:棋盘,棋子
书柜:书
我曾尝试使用WordNet,特别是meronym语义关系; 但是,这种方法并不一致,如下面的结果所示:
网球:发球,凌空,脚故障,定位,回归,优势
斯诺克:什么都没有
国际象棋:象棋移动,棋盘(其自己的缩写关系显示'方形'和'对角线')
书柜:搁置
最终将需要对术语进行加权,但现在这并不是真正的问题.
有人对如何做到这一点有任何建议吗?
只是一个更新:使用Jeff和StompChicken的答案结合起来.
从维基百科中检索到的信息质量非常好,特别是(不出所料)有如此多的相关信息(与某些语料库相比,如"博客"和"ipod"这样的术语不存在).
维基百科的结果范围是最好的部分.该软件能够匹配诸如(为简洁起见而切割的列表)等术语:
最大的问题是将某些词分类为物质文物; 默认WordNet不是一个可靠的资源,因为它中不存在许多术语(例如'ipod',甚至'trampolining').
我想知道以下哪两个命令在语义上是正确的HTML:
1. <h1><a>Header</a></h1>
2. <a><h1>Header</h1></a>
Run Code Online (Sandbox Code Playgroud) 引用这个答案:
除了元组是不可变的之外,还有一个语义上的区别应该指导它们的使用.元组是异构数据结构(即,它们的条目具有不同的含义),而列表是同构序列.元组有结构,列表有顺序.
这对我来说很有意义.但是为什么Django使用元组而不是列表进行设置?例:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
)
Run Code Online (Sandbox Code Playgroud)
这个(以及所有其他设置)在语义上是不是一个完美的案例列表?
可能重复:
这个新的[]是什么简写?
两者之间有什么区别吗?
var strings = new string[] { "hello", "world" };
Run Code Online (Sandbox Code Playgroud)
和
var strings2 = new[] { "hello", "world" };
Run Code Online (Sandbox Code Playgroud) 通常我使用无序列表标签来设置表单,例如
<fieldset>
<ul>
<li>
<label for="txtName">Name</label>
<input type="text" id="txtName" />
</li>
</ul>
</fieldset>
Run Code Online (Sandbox Code Playgroud)
但是,我经常会看到使用标记的<p>标记,如下所示:
<fieldset>
<p>
<label for="txtName">Name</label>
<input type="text" id="txtName" />
</p>
</fieldset>
Run Code Online (Sandbox Code Playgroud)
哪个在语义上更正确?除了<p>风格更简洁之外,不同的方法是否有任何利弊?
编辑:在这里清楚地打开一罐蠕虫 - 更多选择,哇!:) W3C在这里有推荐吗?
有趣的W3C建议似乎是最不优雅的解决方案:
<p>
<input type="radio" name="flavor" id="choc" value="chocolate" />
<label for="choc">Chocolate</label><br/>
<input type="radio" name="flavor" id="cream" value="cream"/>
<label for="cream">Cream Filled</label><br/>
<input type="radio" name="flavor" id="honey" value="honey"/>
<label for="honey">Honey Glazed</label><br/>
<input type="submit" value="Purchase Donuts"/>
</p>
Run Code Online (Sandbox Code Playgroud)
遗憾的是,关于标记表单元素的最佳约定没有更强的指导.
Java中的类实例可以访问其自己类型的不同实例的私有字段,例如在以下列表中:
public class Foo {
private int secret;
public void bar(final Foo foo) {
foo.secret = 100;
}
}
Run Code Online (Sandbox Code Playgroud)
这种语义(设计语言时)的论据是什么?