ORM的思考2 对象建模
单刀直入
我认为,目前的ORM模型,最大的一个问题,就是没有分离数据和元数据。
在关系数据库里面,SQL都分至少有2种,操作数据,操作元数据(Schema)。特别是后者:
CREATE
TABLE
TABLE1
{
ID TEXT
![](https://www.cnblogs.com/Images/dot.gif)
}
{
ID TEXT
![](https://www.cnblogs.com/Images/dot.gif)
}
然而,在ORM中这个优秀的传统没被继承,变成了一大堆的attribute, xml配置文件。一个Class经常看见:
class
Person
{
[PrimaryKey]
string name;
[Column]
string address;
.
}
{
[PrimaryKey]
string name;
[Column]
string address;
![](https://www.cnblogs.com/Images/dot.gif)
}
多么的混乱,一个用户为了使用对象,首先就要忙着“部署”元数据。当稍微的一点改变,立刻焦头烂额。。。(这个对象的字段到底是哪张表的??? :-))
我的IDEA - 面向对象的元数据操作
在c#里面,一个对象包含了域和方法,域就是元数据,例如下面类中的name, card等。
class
Person
{
string name;
Card card;
List < Email > emailS;
}
class Email
{
string address;
}
class Card
{
string name;
}
{
string name;
Card card;
List < Email > emailS;
}
class Email
{
string address;
}
class Card
{
string name;
}
那么创建这个类的命令:
CREATE
OBJECT EMAIL
{
ADDRESS STRING
}
CREATE OBJECT CARD
{
NAME STRING
}
CREATE OBJECT PERSON
{
NAME STRING,
CARD OBJECT,
EMAILS COLLECTION
}
{
ADDRESS STRING
}
CREATE OBJECT CARD
{
NAME STRING
}
CREATE OBJECT PERSON
{
NAME STRING,
CARD OBJECT,
EMAILS COLLECTION
}
多么的清楚!
通过创建了元数据,用户可以使用非常干净的对象了。我甚至可以:
DROP
OBJECT EMAIL;
ALTER OBJECT PERSON ADD EMAIL COLLECTION
ALTER OBJECT PERSON ADD PRIMARYKEY NAME
ALTER OBJECT PERSON DROP EMAIL
ALTER OBJECT PERSON DROP PRIMARYKEY NAME
ALTER OBJECT PERSON ADD EMAIL COLLECTION
ALTER OBJECT PERSON ADD PRIMARYKEY NAME
ALTER OBJECT PERSON DROP EMAIL
ALTER OBJECT PERSON DROP PRIMARYKEY NAME
不知道大家怎么想。如果不同意的请告诉我一个原因或者解决方案。谢谢!