ORM Revolution - Revived
ORM 革命 —— 复兴
Under the flourious business logics, there exists the terrifying vanity.
在繁华的业务逻辑之下,却是令人感到一丝毛骨悚然的虚无。
Destination 归宿
The ORM should not have any XML config files or Attribute in business object.
ORM不应该拥有各种xml配置文件或者业务实体的属性标签。
The ORM should seperate the Object Schema from Object Data.
ORM应该分离业务实体结构元数据和业务实体数据。
The ORM user should not concern the way ORM store the data.
ORM的用户不应该关注ORM如何对对象进行存储的。
Download 下载
Demo Project:
/Files/zc22/Noebe.ORM.Demo.rar
Demo Database:
/Files/zc22/TESTOBJ.rar
Attention: The demo project is just for TRIAL. Please DO NOT use in commercial purpose.
注意: 演示项目目前仅用于测试。请不要使用于商业目的。
class Program
{
static void Main(string[] args)
{
NoebeConfiguration config = new NoebeConfiguration();
config.Filename = @"e:\temp\TESTOBJ.MDB"; //请修改
config.DatabaseType = Pixysoft.Framework.XSchEmA.DatabaseType.Access;
OrmManager.Initialize(config);
Card card = new Card();
card.CardType = "Noebe.ORM";
List<Email> maillist = new List<Email>();
for (int i = 0; i < 10; i++)
{
Email mail = new Email();
mail.Address = "China" + i;
maillist.Add(mail);
}
Person p = new Person();
p.PersonName = "pixysoft";
p.Card = card;
p.EmailList = maillist;
OrmManager.Instance.Commit(p);
Card test_card = p.Card;
Console.WriteLine(test_card.CardType);
Console.WriteLine(p.PersonName);
List<Email> test_emaillist = p.EmailList;
foreach (Email test_email in test_emaillist)
Console.WriteLine(test_email.Address);
}
class Card : ObjBase
{
public string CardType
{
get { return null; }
set
{
}
}
}
class Email : ObjBase
{
public string Address
{
get { return null; }
set { }
}
}
class Person : ObjBase
{
public string PersonName
{
get { return null; }
set { }
}
public Card Card
{
get { return null; }
set { }
}
public List<Email> EmailList
{
get { return null; }
set { }
}
}
}
If there is an ORM revolution, we hope it comes from China.
如果有那么一场ORM革命,我希望他来自中国。
To be continued ...
待续 ...
Join us! We need your help! (NOSU, Non Open Source Union)
加入我们,我们需要您的帮助!(NOSU, 非开源联盟)
Email: reborn_zhang@hotmail.com
Noebe Team
2007 - 10 -22
posted @
2007-10-22 20:19 辰 阅读(2717) |
评论 (30) |
编辑
根据刘翔自大狂妄不愚蠢的性格,应该不会事先做出起跑就放弃的决定。
我的一些推测,看看日后是否属实。
他首先当天脚痛的很厉害,但是通过短期治疗,希望能挺过第一枪,然后回去再治疗。
开跑的时候他的确发力了,可惜不知道哪个混蛋md抢跑,那一下子疼痛就释放出来不能再忍了
估计刘翔决定不跑后心里一直再骂那抢跑的混蛋。
posted @
2008-08-18 23:35 辰 阅读(204) |
评论 (4) |
编辑
最近项目关于分布式系统,本来使用Web Service处理,但是遇到了最大一个麻烦:
我们是租用虚拟主机,对方虚拟主机每1分钟就会清空进程,导致长事务处理失败,影响数据库稳定性。
后来我想到了经典的Email系统,简单的思路:
1.需要分布式协同的数据对象序列化,然后DES对称加密算法加密,最后进行GZip压缩,作为Email的正文。
2.对Email的标题进行特别处理
3.发送一封Email到邮箱。
4.发送一个信令到目标系统,通知他收Email
5.对方读取Email,寻找对应的Email,获取里面的正文进行处理,删除这份Email
6.对方返回一个信令,通知本地操作成功。
至于信令的发送用回经典的WebService方法。
这样,整个分布式架构就完全穿越防火墙,体现了WebService优点,又保证了分布式事务处理的安全。
后续:
这个思路和UDP很像,而且有效。关键点是:本地Smtp发送了Email之后,必须线程等待,然后再通知对方采用Pop3收邮件,否则由于延迟无法收。
[2008-8-8]
上文的思路太简单,我没有写明白,现在具体说说我的实现方式:
1.分布式协同,无非就是数据的分布式处理,即分布式环境下数据库数据的同步。
2.数据库操作包括insert, update, delete需要协同,其他的不需要
3.select不需要协同,因为多个数据库保存着有效的数据副本就行了。
4.数据库一个事务处理,无非就是insert,update,delete的处理
我的思路:
1.写一个类,能够反映当前表的处理方式和顺序。
Class DataTableItem
{
int sequence;//数据在事务中的处理顺序
DataTable table;//被处理的数据
ProcessStatus status;//处理方式,insert, update, delete
}
public enum ProcessStatus
{
Insert,
Delete,
Update
}
2.一个处理流程:
。通过WS与对方第一次握手,得到一个Token
。把需要事务处理的数据保存在数据结构 List<DataTableItem>里面。
。对数据结构进行序列化、用TOKEN进行DES加密,用GZIP进行压缩
。写一封Email,标题特别处理,内容是处理后的数据,SMTP发送Email
。Thread.Sleep(5000)
。通过WS通知对方接受邮件
。对方通过POP3读取所有邮件,分析Email的标题,得到当前需要处理的Email
。对方利用TOKEN解密数据,事务处理,返回处理结果到本地。
。本地接受到了对方的处理结果,一个事务处理完毕
3.思路非常简单有效,充分利用了EMAIL系统,EMAIL系统非常经典,完全经受的住各种环境下的考验,但是微软的WS却非常糟糕,很容易出错超时之类的。
posted @
2008-08-07 15:05 辰 阅读(1773) |
评论 (14) |
编辑
现在大多数虚拟主机的内存回收策略非常变态,例如万网平均10分钟就会回收一次内存,而西部数码更是1分钟清一次。
这样使用传统的思路吧数据保存在内存里就会失败(惨痛的教训,调试了半天终于发现)。
如果使用了传统的Singleton模式,那么本质上singleton就不存在了,仍然是每次新建。
传统Singleton:
public class ClassicSingleton
{
private static ClassicSingleton instance;
public static ClassicSingleton Instance
{
get
{
lock (typeof(ClassicSingleton))
{
if (instance == null)
instance = new ClassicSingleton();
return instance;
}
}
}
}
为了解决上面的问题,我把数据保存在Application里面,成为针对Asp.net的singleton:
public class AspNetSingleton
{
private const string cacheid = ".aspnetsingleton";
private static AspNetSingleton instance;
public static AspNetSingleton Instance
{
get
{
lock (typeof(AspNetSingleton))
{
AspNetSingleton cache = HttpContext.Current.Application[cacheid] as AspNetSingleton;
if (cache == null)
{
cache = new AspNetSingleton();
HttpContext.Current.Application[cacheid] = cache;
}
return cache;
}
}
}
}
posted @
2008-07-18 12:49 辰 阅读(21) |
评论 (0) |
编辑
本团队全部由上海交通大学计算机软件与应用硕士研究生组成,开发经历丰富,曾参与上海徐家汇企业信息系统开发、上海武警总队信息化系统需求分析等。其核心技术包括:
1.Noebe持久层,统一接口操作不同数据库,支持Oracle,Access,Sql Server, My Sql等。
2.Orm,自主研发的对象关系映射层。
3.Asp.net的RBAC权限层,自主研发
4.Dataflow数据流层,企业信息数据处理采用统一的文档描述,极大简化系统开发。
5.基于Web Server的Noebe持久层,将数据库操作通过WebService调用,是实现企业SOA战略的核心技术。
6.Consistency分布式数据库同步层,是企业分布式协同的核心技术。
7.基于RBAC和ORM的workflow工作流层,是企业业务流程开发的关键技术。
本团队现在与“大城小格”商铺联盟合作,为其研发ERP信息系统。其基本架构包括:
1.中心系统:是整个系统核心,核心数据库的所在地。
2.POS系统:主要负责商品销售、上货、退货等。
3.网站系统:主要为商家提供销售信息、分布式上货、退货管理等。
如果您有意与我们进一步交流,欢迎
致电:13828409805,
或Email:reborn_zhang@hotmail.com
或来现场参观:广州市公园前动漫星城购物中心负二层E2111。
posted @
2008-07-03 17:08 辰 阅读(641) |
评论 (10) |
编辑
我尝试把这篇文章放在首页,希望看看是否有人理解。
思考过程:
很有钱 =
我们的自身价值很高 =
我们创造了很多的价值 =
除了我和你的努力之外,很多人一起为我们创造了价值
=》我们需要更多的人以更多的形式为我们创造价值
总结:
要短期暴富,只能让更多人为我们创造价值。但是他们不可能无偿为我们服务 -> 让他们相互间创造价值的时候,我们从中获利。
=借他人之力赚他人之钱
目前指导意义:
1. 聚集更多的人
2. 他们之间互动能够满足对方的需求,创造了价值
3. 我们从他们的互动中能够获利。
实例分析
我就用cnblogs举例,如果cnblogs要成为中国xxx等,就需要拥有很多价值。目前而言,我们客户并没有直接为cnblogs创造价值,我们只是在为对方创造价值(文章分享),感觉cnblogs仍然依赖microsoft,作为了microsoft的一个哨站一样,自身没有形成价值链,而是融合在了微软的价值链里面,比如宣传微软的技术等。
如果要自身形成价值链,要借鉴facebook,简单例子,每天有上万的人在为facebook写代码,他们目的是为了满足自己的需要,为他人创造价值,但是facebook却从中截取了以部分,让自己的价值不断上升。
posted @
2008-06-30 23:28 辰 阅读(2726) |
评论 (31) |
编辑
30年前,《纽约先驱论坛报》宣称一个至今不为人熟知的男人是“继牛顿、达尔文、弗洛伊德、爱因斯坦之后最重要的思想家”。直到网络盛行的今天,我们捧读他当年的著作,才猛然悟到此人的伟大。
他叫马歇尔·麦克卢汉。
“电子技术到来以后,人延伸出(或者说在体外建立了)一个活生生的中枢神经系统。” 1965年麦克卢汉在《理解媒介》一书中写下的这句话,以今天的眼光,仍是个有些高深莫测的说法。
是呀,如今网就是我们,人和企业的另一付神经。人造的电子神经和父母给的蛋白质神经完全不同,进化的伟力强逼二者互联。今天,从电子神经传来了大量的数据,可数百万年前人类为抵御风雨、猎捕野兽逐步进化而来的神经系统并没考虑处理这种数据的需求。
于是,问题来了。
数据迷雾中的迷茫
上世纪90年代初还没什么感觉,到了90年代末,人们已经能够察觉到眼前的数据迷雾。进入21世纪,雾更重了。这种事就在你我身边,一个平常饮料店的故事可以为证。
1993年前,店里卖的饮料只有啤酒、可口可乐和北冰洋汽水,进货出货老板在一个旧本子上记着,顾客是周围的街坊,全是熟人。1995年,生意大了,各处开了分号,饮料多了,酒也多了,卖的东西总共几十种。店里装了自动柜员机,每笔买卖都得摆弄键盘,有点儿麻烦,可省了动脑子。柜员机里记的账天天都打印出来送给老板。开始老板每天看,时间一长,看不过来,加个总数就算了。生意该怎么做,老板还算清楚。1998年,经营的品种过了百,店里连了网,用上了财务软件。1999年又上了互联网,周围的店一天天多起来,客人来自四面八方。账单每天打出厚厚一堆,老板瞧着密密麻麻的数字楞神,直嚷嚷生意难做。
自从饮料店老板多了这付电子神经,上面传来的数据一日多似一日,爹妈给的肉神经要超负荷运转了。原先,老板很清楚什么季节该卖什么、什么人爱什么、到时候进多少货、进什么货。现在看着精确无比、但毫无头绪的数字没了主意,弄不清什么地段的店什么好卖,弄不清进谁家的货更合算,弄不清什么样的顾客喜欢什么。手下人出的主意五花八门,眼看着利润往下掉,干着急。数字天书蒙住了人的眼睛,老板被裹入到“数据迷雾”中。
数据迷雾无处不在,企业越大,雾越浓重。做酒店的,弄不清世界各地分号每间客房的平均收益,弄不清什么样的客人常来,最后惨到弄不清自已的市场定位。数据总量的增长让人瞠目结舌,美国MCI是跨国的电信公司,长途电话客户2亿,电脑里数据存了5TB,每月还增加300GB。据美国加州一所大学研究,世界上每个人,不论死活,已经产生或将要产生250MB的数据,每年全球数据净增2×1010GB。
大雾沉沉如何行路?电子神经和肉神经之间可以装个转换器,把数字天书转换成彩色的图、简单的表、概括的信息,肉神经就能明白业务状态,做出决策。两付神经间的转换器、指引人类在数据迷雾里穿行的灯就是“商业智能”。
商业智能里的智慧
商业智能(BI)的概念最早是Gartner Group于1996年提出来的,那时互联网还没如此红火。当时将商业智能定义为以帮助企业决策为目的,对数据进行收集、存储、分析、访问等处理的一大类技术及其应用。当时,Gartner Group预测说:到2000年,信息民主将在具有前瞻性思维的企业中浮现。借助商业智能,员工、咨询员、客户、供应商以及公众就能有效运用信息。商业智能所涉及的技术与应用,在Gartner Group命名之前就有。作为企业内部的信息系统,最早被称之为执行信息系统(EIS),在羽化成商业智能之前叫决策支持系统(DSS)。
把商业智能看做一种解决方案应该比较恰当,其中包含大量技术和应用系统,还有更多的技术和应用正在向商业智能的旗帜集合。商业智能解决方案的基本成分有数据仓库、数据分析、数据挖掘、数据展示和企业信息门户。正在向商业智能靠拢的有ERP、CRM、文本挖掘、知识管理、Web智能、无线智能、竞争智能、市场智能等等,五花八门,数不胜数。
数据仓库之父Bill Inmon在1990年写道:“数据仓库是面向主题的、集成的、随时间变化的、永不散失的数据集合,用以支持管理层制定决策。”数据仓库的数据不是数据库里公司运营的流水账,而是通过元数据(Metadata)按主题组织的;数据仓库集成多种数据源,包括公司内部和外部的数据,并将其整合成连贯的整体。数据仓库是商业智能的数据基础。

X坐标:每天的时间 Y坐标:月份 Z坐标:销售量 灰度坐标:气温
商业智能里数据分析的方法很多,时下最时兴的是OLAP(在线分析处理)。利用这种方法,可以从不同角度和维度抽取并观察数据。比如,分析销售可以从产品、地域、时间等三个维度产生视图。What-If分析(假设分析)是另一种标准的方法,利用它,能建立部门或企业的数据模型。决策时,将参数输入,由系统根据历史数据模拟,预测结果。第三种常见的是ANOVA分析(变动分析)。利用它,能从多种可能性中确定造成问题的真实原因,在制造业中应用较为广泛。数据挖掘也是一种数据分析的方法,其目的是在历史数据中寻找潜在的趋势,使企业在“记忆”中学习,预测未来。
商业智能里数据展现的方式也很多。预先设计的标准报告可以用电子与纸介形式提供固定格式的数据;结构化报告允许用户对格式和数据项进行一定范围的变动;特别报告可以随用户要求任意提取数据和制定格式;OLAP通常将数据展示成三维彩色图;例外报告是将超过规定值的数据汇总,作为警报输出。
企业信息门户(EIP)已经演变成商业智能的标准成分。EIP为商业智能解决方案提供了统一的、基于Web、易于融合多种数据源和应用系统的界面。
数据迷雾是商业智能的饲料,雾越大,BI越多越壮。上世纪80年代,商业系统只输出打印在纸上的报告。90年代初雾重了,销售部门用了数据仓库,可以回答前十名客户是谁,目标市场何在这类的问题。到90年代末,不仅销售部,市场部、客户服务部,甚至研发部都想成为BI的用户,商业智能壮大成了企业的公共平台。本世纪,BI只用于企业内部运作已经不够,人们还要它分析客户行为、市场走向、对手和合作伙伴。
商业智能已经从部门级应用进化成了企业级应用,正在从企业内部应用向全局应用进化。
智能市场里的景致
本世纪以来,商业智能市场挺热闹。
今年6月,Dataquest说去年全球数据库销售额是88亿美元,它还在早先的报告里预测明年商业智能市场全球销售额可达62亿美元。数据库市场近年来年增长率在20%左右,而商业智能超过35%。看看,现在商业智能市场与数据库差不多,没两年就能超过去。有实力的公司怎么会忽视如此庞大的市场,在美国市场上有数十家各种各样的BI厂商,嚷嚷几年了。现在国内声音还小,过不了几个月,媒体厂商没准也会让你满眼都是BI。
去年,Gartner Group研究一番,把商业智能系统的供应商分为领先者和挑战者两大阵营。领先者全是知名度不高的小公司,比如AlphaBlox、Cognos、Crystal等等,这些公司进入BI市场较早,产品功能完备,用户多。它们提供包括What-If分析和OLAP在内的比较完备的数据分析及展示工具,这些商业智能平台都要建立在第三方的数据仓库之上。
Gartner Group 把Oracle、CA、SAP、SAS以及微软这些大家伙列进挑战者名单。这类公司有自己传统的数据库、数据仓库,甚至ERP、CRM解决方案,现在开始构筑或加强数据分析和展示平台。Oracle不仅有数据库、数据仓库、CRM、ERP,还提供财务/销售分析。SAP除数据仓库外,也提供财务/人力资源分析、CRM和供应链管理解决方案。这些公司进入BI市场稍晚,产品不够完善,提供BI解决方案时需集成第一阵营的产品。IBM、HP、Compaq、Sybase、Infomix等公司虽然在报告中没入围,也在向客户提供BI解决方案。
今年以来,国内银行已有BI系统投入运营,电信系统也开了研讨会,不过,主要是国外厂商在推动。其实,BI中数据分析与展示工具挺适合小公司开发,相信很快会有国内公司加入这个潮流。
电子神经在你我身外不知不觉地滋长蔓延,数据迷雾一刻比一刻浓密。如果有一天你在商场上迷失了自已,不要忘记:点亮商业智能。
posted @
2008-01-21 21:51 辰 阅读(51) |
评论 (0) |
编辑
WIC排名 公司品牌 公司名称 网站域名 主机数量 公司总部
第1名 新网 北京新网数码信息技术有限公司 XINNET.COM 266,585 北京
第2名 万网 北京万网新兴网络技术有限公司 WWW.NET.CN 174,401 北京
第3名 中资源 厦门中资源网络服务有限公司 ZZY.CN 169,640 厦门
第4名 新网互联 北京新网互联科技有限公司 DNS.COM.CN 103,995 北京
第5名 中国频道 厦门精通科技实业有限公司 ONLINENIC.COM 70,386 厦门
第6名 商务中国 厦门华商盛世网络有限公司 BIZCN.COM 66,955 厦门
第7名 通联无限 北京通联无限科技发展有限公司 TOPBIZ.CN 14,641 北京
第8名 时代互联 珠海市时代互联信息技术有限公司 NOW.NET.CN 12,525 珠海
第9名 你好万维 北京万维通港科技有限公司 NIHAO.NET 12,473 北京
第10名 数字引擎 厦门市数字引擎网络技术有限公司 CNSPEED.COM 11,508 厦门
第11名 西部数码 成都西维数码科技有限公司 WEST263.COM 9,874 成都
第12名 域名频道 上海博铭网络技术服务有限公司 DNS110.COM 8,162 上海
第13名 中国E动网 上海威多斯数码科技有限公司 EDONG.COM 7,872 上海
第14名 广州网域 广东网域科技有限公司 ORAY.NET 7,597 广州
第15名 虎翼网 北京金络神电子商务有限责任公司 51.NET 7,291 北京
第16名 搜狐 搜狐公司 SOHU.COM 6,557 北京
第17名 首都在线 263网络集团 263.com 6,227 北京
第18名 华夏名网 成都飞数科技有限公司 BIGWWW.COM 5,712 成都
第19名 中国化工网 浙江网盛科技有限公司 CHEMNET.COM 5,341 杭州
第20名 百优网络 厦门百优科技有限公司 100U.com 4,408 厦门 |
www.net.cn
1200/year
III型.NET空间
300MB独立网页空间、100MB数据库空间、200MB独立日志文件空间、30GB/月流量
免费100MB MsSQL2000数据库空间、免费提供1个ODBC数据源
http://www.xinnet.com/src/listdetail.php3?Name=C023
1200/year
300 / 50 / 150 / 20G
http://www.chinaidc.com.cn/Ihost_Server_HOST.asp
posted @
2008-01-20 21:28 辰 阅读(41) |
评论 (0) |
编辑
1. 说明方法是干什么的(如果方法名设计得当,可以省略)
2.方法返回null,或者非正常值的情况,例如:当数据不存在,返回MaxValue
3.输入参数的要求:例如什么参数不允许null
posted @
2008-01-17 22:28 辰 阅读(53) |
评论 (0) |
编辑
http://down.cnzz.cn/info/30426.aspx
http://mb.jz173.com/261typeList1.html
http://www.92e.net/soft/80/down-1241.html
http://down.cnzz.cn/List_70_2.aspx
posted @
2007-12-29 21:16 辰 阅读(51) |
评论 (0) |
编辑
http://quickstarts.asp.net/QuickStartv20/aspnet/doc/ctrlref/standard/multiview.aspx
ImageMap
给出一张大图。然后在ImageMap里面设立HotSpot,就像切割成了小图。这样针对小图就有不同的操作
Table
和普通的Table差不多。不过后台通过编程切割出框,然后放数据
Literal
和Label差不多。但是输出到html之后,变成完全的text
MultiView
在同一个地方可以放多个视图。通过后台代码进行切换:
MultiView1.ActiveViewIndex = 0;
在MultiView里面嵌套View
http://channel7.cn/2005/1-24/142445.html
Panel
里面的所有控件能够有相同的行为。例如:一个有4步骤的注册,放在4个panel里面,然后控制他们的visable就可以达到逐步的效果。
Substitution
使用 Substitution 控件指定输出缓存网页上要以动态内容替换该控件的部分。Substitution 控件为要缓存大部分内容的页提供了一种缓存局部页的简化解决方案。
简单说,页面被缓存,但是有些数据希望实时。
Localize
和literal相似。显示本地化文本
CompareValidator
比较2个控件的值
ValidationSummary
汇总某个控件引起的所有验证错误
http://www.builder.com.cn/2006/1228/349062.shtml
http://www.cnblogs.com/xuzs/archive/2005/12/27/306062.html
Web Parts 是ASP.NET2.0中一个非常令人感兴趣的特性。它为创建动态的网页接口提供了一系列的可用控件,使得用户非常容易就可以进行配置或者个性化页面。用户可以显示、隐藏或者移动Web Parts组件。下面,我将为大家介绍一下Web Parts的概貌。
WebpartManager
是必须的
WebpartZone
支持的区域
说白了,和google提供的可移动的自定义组建一样
posted @
2007-12-28 20:06 辰 阅读(39) |
评论 (0) |
编辑