微软开发技术

netgod博客
posts(20) comments(197) trackbacks(1)
  • 博客园
  • 联系
  • 订阅 订阅
  • 管理

News

 
昵称:netgodcn
园龄:3年9个月
粉丝:7
关注:1

搜索

 

常用链接

随笔分类

  • dotnet开发技术(3)
  • WindowsServer应用(1)
  • 不朽的C语言
  • 技术视野(11)
  • 开发工具(2)
  • 开源演义(1)
  • 框架编程指南
  • 四十三章经(4)

随笔档案

  • 2010年1月 (2)
  • 2009年8月 (2)
  • 2009年7月 (1)
  • 2009年6月 (1)
  • 2009年3月 (1)
  • 2009年1月 (1)
  • 2008年12月 (2)
  • 2008年10月 (1)
  • 2008年9月 (2)
  • 2008年7月 (3)
  • 2008年4月 (4)

netgod官方站

  • netgod博客
  • netgod博客
  • netgod官方站
  • 开源人网站

最新评论

阅读排行榜

评论排行榜

推荐排行榜

View Post

基于.Net平台的extjs单用户Blog系统发布

  这是用.net2.0开发的一个基于ExtSJ技术实现的简单blog系统,演示了ExtJS的综合应用。

  系统后台使用.Net平台,语言为C#,技术构架为NHibernate+Spring.Net+Vifir实现,支持多种数据库,采用三层结构,数据访问层DAO、业务逻辑层及表示层完全分离。DAO层使用的泛型DAO,只需要一个DAO接口即可,不需要写具体的实现。

  系统演示:

  系统下载地址:http://www.vifir.com/download/extblog-net.zip

  下面是系统后台的截图

  

  (登录)

  系统中的一些源码摘要:
域模型:

namespace Vifir.Model.Domain
{
   
public class Topic
    
{
        
private long id;
        
        
private string title;      

        
private string content;
        
        
private string intro;       

        
private TopicCategory category;       

        
private IList<TopicComment> comments = new List<TopicComment>();

       
private DateTime inputTime = DateTime.Now;
       
        
private int readTimes = 0;
       
public virtual long Id
        
{
            
get { return id; }
            
set { id = value; }
        }

       
public virtual string Title
        
{
            
get { return title; }
            
set { title = value; }
        }

       
public virtual string Content
        
{
            
get { return content; }
            
set { content = value; }
        }

       
public virtual string Intro
        
{
            
get { return intro; }
            
set { intro = value; }
        }

       
public virtual TopicCategory Category
        
{
            
get { return category; }
            
set { category = value; }
        }

       
public virtual IList<TopicComment> Comments
        
{
            
get { return comments; }
            
set { comments = value; }
        }

       
public virtual DateTime InputTime
        
{
            
get { return inputTime; }
            
set { inputTime = value; }
        }

       
public virtual int ReadTimes
        
{
            
get { return readTimes; }
            
set { readTimes = value; }
        }

    }

}

DAO接口

namespace Vifir.Model.DAO
{
    
public interface ITopicDAO : GenericDAO
    
{
    }

}

泛型DAO配置 

<object id="TopicDao" parent="abstractDao">    <property name="proxyInterfaces" value="Vifir.Model.DAO.ITopicDAO"/>    <property name="target">      <object parent="baseDAO" type="Vifir.Core.GenericDAOImpl&lt;Vifir.Model.Domain.Topic>,Vifir.Core" />    </property>  </object>

TopicService业务层实现代码

namespace Vifir.Model.Service.Impl
{
    
public class TopicServiceImpl:ITopicService
    
{
            
private ITopicDAO topicDao;

    
public ITopicDAO TopicDao
    
{
      
set { topicDao = value; }
    }

    

    
public long addTopic(Topic topic) {    
        
this.topicDao.Save(topic);
        
return topic.Id;
    }

    
    
public Topic getTopic(long id) {
        Topic topic 
= this.topicDao.Get(id);
        
return topic;
        }

    
    
public bool delTopic(long id) {    
            Topic topic 
= this.getTopic(id);
            
if(topic.Comments.Count>0)throw new LogicException("该文章下还有评论,不能删除!");
            
if (topic != null) {
                
this.topicDao.Remove(id);
                
return true;
            }
            
            
return false;    
    }

    
    
    
public IPageList getTopicBy(IQueryObject queryObject) {    
        
return QueryUtil.query(queryObject, typeof(Topic),this.topicDao);        
    }

    
    
public bool updateTopic(long id, Topic topic) {
        
if (id != default(long))
        
{
            topic.Id
=id;
        }
 else {
            
return false;
        }

        
this.topicDao.Update(topic);
        
return true;
    }
    
    }

}

Web层的添删改查代码:

public partial class manage_Topic : BaseAction
{
    
private ITopicService service;   
    
private ITopicCategoryService categoryService;
    
public ITopicService Service
    
{
        
set { service = value; }
    }

    
public ITopicCategoryService CategoryService
    
{  
        
set { categoryService = value; }
    }


    
public void List()
    
{
        QueryObject qo 
= new QueryObject();
        ToPo(qo);
        
string categoryId = Request.Params["categoryId"];
        
if (categoryId != null && !"".Equals(categoryId))
        
{
            qo.addQuery(
"obj.Category.id", long.Parse(categoryId), "=");
        }

        IPageList pageList 
= service.getTopicBy(qo);
        jsonResult 
= pageList;
    }


    
public void Remove()
    
{
        
long id = long.Parse(Request.Params["id"]);
        service.delTopic(id);
        jsonResult 
= true;
    }


    
public void Save()
    
{
       Topic obj 
= new Topic();
       ToPo(obj);
       
string CategoryId = Request.Params["CategoryId"];
       
if (CategoryId != null && !"".Equals(CategoryId))
       
{
         TopicCategory c 
= this.categoryService.getTopicCategory(long.Parse(CategoryId));
         obj.Category 
= c;
       }

       
if (!HasError())
       service.addTopic(obj);
       extFormResult 
= true;
    }


    
public void Update()
    
{
        
long id = long.Parse(Request.Params["id"]);
        Topic obj 
= service.getTopic(id);
        ToPo(obj);
        
string CategoryId = Request.Params["CategoryId"];
        
if (CategoryId != null && !"".Equals(CategoryId))
        
{
            TopicCategory c 
= this.categoryService.getTopicCategory(long.Parse(CategoryId));
            obj.Category 
= c;
        }

        
if (!HasError())
            service.updateTopic(id, obj);
        extFormResult 
= true;
    }

}


 

 

标签: extjs dotnet spring.net nhibernate dao service
绿色通道:好文要顶关注我收藏该文与我联系

posted on 2008-04-16 16:30 netgodcn 阅读(3573) 评论(27) 编辑 收藏

View Comments

1390761
#1楼  回复 引用 查看   
NHibernate+Spring.Net+Vifir 牛!thx!
2008-04-16 16:37 | Justin      
#2楼  回复 引用   
我看了一下做的非常的棒。。。可以参考。。。做的很牛。。
2008-04-16 16:55 | 楚广明.。[未注册用户]
#3楼  回复 引用 查看   
哦,里面的数据库是什么的啊,好像没有
2008-04-16 17:00 | 黑*马      
#4楼  回复 引用 查看   
似乎只有web项目的代码,楼主能发布其它项目的代码吗?
2008-04-16 17:24 | 狼Robot      
#5楼  回复 引用 查看   
开源的吗
2008-04-16 17:27 | 高海东      
#6楼[楼主]  回复 引用 查看   
由于使用了持久层框架NHIBERNATE,所以支持多种数据库,如果你使用SQL SERVER数据库,只需要建立一个空数据库并在web.config中修改相关配置就可以在第一次运行时自动建表了。
2008-04-16 17:31 | netgodcn      
#7楼[楼主]  回复 引用 查看   
因为许多核心代码正在完善中,暂时只开放WEB项目的代码,Vifir.com VIP会员可以获得Vifir.Model代码,Vifir.Core会提供文档出来的。
2008-04-16 17:34 | netgodcn      
#8楼  回复 引用 查看   
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

未能加载文件或程序集“Common.Logging, Version=1.2.0.0, Culture=neutral, PublicKeyToken=af08829b84f0328e”或它的某一个依赖项。系统找不到指定的文件。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.IO.FileNotFoundException: 未能加载文件或程序集“Common.Logging, Version=1.2.0.0, Culture=neutral, PublicKeyToken=af08829b84f0328e”或它的某一个依赖项。系统找不到指定的文件。

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

程序集加载跟踪: 下列信息有助于确定程序集“Common.Logging, Version=1.2.0.0, Culture=neutral, PublicKeyToken=af08829b84f0328e”无法加载的原因。


警告: 程序集绑定日志记录被关闭。
要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)设置为 1。
注意: 会有一些与程序集绑定失败日志记录关联的性能损失。
要关闭此功能,请移除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。



堆栈跟踪:


[FileNotFoundException: 未能加载文件或程序集“Common.Logging, Version=1.2.0.0, Culture=neutral, PublicKeyToken=af08829b84f0328e”或它的某一个依赖项。系统找不到指定的文件。]
Spring.Context.Support.WebSupportModule..cctor() +0

[TypeInitializationException: “Spring.Context.Support.WebSupportModule”的类型初始值设定项引发异常。]

[TargetInvocationException: 调用的目标发生了异常。]
System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck) +0
System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache) +103
System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache) +261
System.Activator.CreateInstance(Type type, Boolean nonPublic) +66
System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) +1036
System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) +114
System.Web.Configuration.ModulesEntry.Create() +41
System.Web.Configuration.HttpModulesSection.CreateModules() +203
System.Web.HttpApplication.InitModules() +219
System.Web.HttpApplication.InitInternal(HttpContext context, HttpApplicationState state, MethodInfo[] handlers) +1251
System.Web.HttpApplicationFactory.GetNormalApplicationInstance(HttpContext context) +243
System.Web.HttpApplicationFactory.GetApplicationInstance(HttpContext context) +106
System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr) +214




--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.42; ASP.NET 版本:2.0.50727.42


请问怎么回事啊
2008-04-16 21:05 | Sam Lin      
#9楼  回复 引用 查看   
单从界面上看,就知道博主下了一翻工夫的!
先下下来,再仔细研究,
2008-04-16 21:08 | kkun      
#10楼  回复 引用   
广告来的,bs 为你的站做广告的把
2008-04-16 21:11 | bs lz[未注册用户]
#11楼  回复 引用   
恶心的做法,要开源就全部开源,不要在这里呆人家胃口,没什么意义吧

还弄了个VIP,可能真如楼上所说的,是来做广告的
2008-04-16 21:14 | BSU[未注册用户]
#12楼  回复 引用   
看了就想吐,“开源人”和“VIP”这两个真刺眼

要开源就全部开源,不要总想掖着藏着,有什么意思
2008-04-16 21:20 | BSU[未注册用户]
#13楼[楼主]  回复 引用 查看   
8楼的问题解决如下:请将Common.Logging.dll放置到bin目录下即可
2008-04-16 23:06 | netgodcn      
#14楼[楼主]  回复 引用 查看   
10楼、11——12楼的,请问你有开源作品并且是开源人士吗,否则请不要拿这个说事
2008-04-16 23:34 | netgodcn      
#15楼  回复 引用   
--引用--------------------------------------------------
netgodcn: 10楼、11——12楼的,请问你有开源作品并且是开源人士吗,否则请不要拿这个说事
--------------------------------------------------------


国外的开源也没有说,你要是开源人士才能用,你这个就是自欺欺人,打着开源的幌子,搞什么收费的VIP,当了婊子就不要立什么牌坊.国外开源也能挣钱,但是不是VIP收费,是服务收费.真的是玷污了开源两个字
2008-04-17 09:14 | 我不是开源人[未注册用户]
#16楼  回复 引用   
就拿你使用的spring.net,nhibernet,这些也没说你必须是VIP才能让你查看全部的代码,你自己好好读读人家的开源协议吧,还说什么自己是开源人,丢死个人
2008-04-17 09:17 | 我不是开源人[未注册用户]
#17楼  回复 引用   
做广告的没意思
2008-04-17 09:57 | want990[未注册用户]
#18楼  回复 引用   
好一个“开源”
2008-04-17 10:22 | 我不想说[未注册用户]
#19楼  回复 引用 查看   
虽然我不是什么高手 也来说一下
太恶心了 框架我没用 都自己写的 虽然很业余 不是什么好框架
我还是学生 自己写的东西 也开源研究一下 强烈bs你 要不就不发 发了就不要打开源的幌子

http://www.shangducms.cn
2008-04-17 13:12 | guojing      
#20楼  回复 引用   
东西好坏不说,先鄙视下此人人品。。。
2008-04-17 23:33 | 马云峰[未注册用户]
#21楼  回复 引用   
这叫什么开源呀,鄙视
2008-04-21 10:50 | 晕1111111[未注册用户]
#22楼[楼主]  回复 引用 查看   
鄙视管用吗,会管用,只能让中国做开源的人减少而已,还能有什么用
2008-04-21 14:36 | netgodcn      
#23楼  回复 引用 查看   
大哥 你不开源,也不要拿这些东西来忽悠我们嘛~
浪费大家的 时间啊!!! 我们都是纳税人啊!!!
2008-04-22 16:31 | 隐姓埋名      
#24楼  回复 引用 查看   
界面太僵化了,专业程度太高,呵呵
2008-04-28 13:03 | Jeason      
#25楼  回复 引用   
23楼的太不厚道了,你是纳税人管人家屁事,税又没纳到人家这里
2008-05-04 12:00 | fetion[未注册用户]
#26楼  回复 引用   
大致看了一下,技术方面也没什么过人之处啊。不明白为什么还这么遮遮掩掩。

你用extjs做的ui,却不开源js代码,这有点说不过去吧。

我也做过一个类似的基于extjs的cms,等交了客户就给大家开源。
2008-06-01 10:39 | sq[未注册用户]
#27楼  回复 引用 查看   
public static string GetJSON(object value)
{
HandleJSON V_0 = new HandleJSON();
return V_0.getJSON(value);
}

private class HandleJSON
{

private IDictionary vars = null;
private IList stack = null;
private IList declars = null;
private int d=0;

public HandleJSON()
{
this.vars = new Hashtable();
this.stack = new ArrayList();
this.declars = new ArrayList();
this.d = 0;
}

public string getJSON(object value)
{
int V_2;
string V_0 = this.generatorJSON(value);
string V_1 = "";
for (V_2 = 0; V_2 < this.declars.Count; V_2++)
{
V_1 = V_1 + this.declars[V_2];
}
for (V_2 = 0; V_2 < this.stack.Count; V_2++)
{
V_1 = V_1 + this.stack[V_2];
}
return (V_1 + "return " + V_0 + ";");
}

public bool IsSimpleType(Type type)
{
return (type.IsPrimitive || type.Equals(typeof(string))) || (type == typeof(DateTime));
}

public string generatorJSON(object value)
{
string V_0 = "";
string V_1 = "v" + d++;
if (value == null)
{
return V_0 + "null";
}
if (IsSimpleType(value.GetType()))
{
if (value is DateTime)
{
DateTime V_2 = (DateTime)value;
return string.Concat(new object[] { "new Date(", V_2.Year, ",", V_2.Month, ",", V_2.Day, ",", V_2.Hour, ",", V_2.Minute, ",", V_2.Second, ")" });
}
if ((value is string) || value.GetType().IsEnum)
{
string V_3 = value.ToString();
V_3 = V_3.Replace("\"", """);
return "\"" + AjaxUtil.convert2unicode(V_3, true) + "\".replace(/"/g, '\"')";
}
if (value is bool)
{
return value.ToString().ToLower();
}
return "" + value;
}
vars.Add(value, V_1);
if (value is IDictionary)
{
V_0 = handlerMap(V_1, value);
}
else if (value is ICollection)
{
V_0 = handlerCollection(V_1, value);
}
else if (value.GetType().IsArray)
{
V_0 = handlerArray(V_1, value);
}
else
{
V_0 = handlerObject(V_1, value);
}
return V_0;
}

核心源码请访问http://www.xiangyu2099.cn
2008-12-04 10:05 | rufus      
注册用户登录后才能发表评论,请 登录 或 注册,返回博客园首页。
首页博问闪存新闻园子招聘知识库
最新IT新闻:
· 伊朗封杀Gmail和Facebook等互联网服务
· 分析称专利之争让谷歌苹果两败俱伤
· Android平台发现新型手机病毒Rootsmart
· HTC首款Android4.0手机大曝光
· 这是不是你期待的 iPad 3?
» 更多新闻...
最新知识库文章:
· 高级编程语言的发展历程
· 如何学习一门新的编程语言?
· 学习不同编程语言的重要性
· 为什么我喜欢富于表达性的编程语言
· 计算机专业的女生为什么要学编程
» 更多知识库文章...

China-pub 2011秋季教材巡展
China-Pub 计算机绝版图书按需印刷服务
 
Powered by:
博客园
Copyright © netgodcn