Spiga

一个综合设计感想-shangducms NT

2008-03-07 13:10 by guojing, 2447 visits, 网摘, 编辑
在经过了一段时间的设计和重构,对网站后台设计有了更多更详细的想法,故写在这里和大家分享一下,本人是个学生,不是什么高手,也不是一出口就是什么模式什么模式的,也有迷惑,在这里分享我自己的项目,主要是为了和大家共同交流和学习,当然肯定有很多谩骂的人,希望你能照顾一下小弟我,我真的不是高手,只是喜欢写代码,算是一个programmer吧,希望说垃圾的人能够提出意见,我也能加强学习,当然,最主要的是和大家交流.

论坛相关地址: http://www.shangducms.cn/bbs/topic.aspx?topicid=146
主页演示地址: http://www.shangducms.cn
下载测试地址: http://www.shangducms.cn/download/shangducmsNT2.0beta.rar

先说一下简单的安装,下载后,支持vs2005/2008 数据库支持 sql 2000/2005 .net环境支持2.0/3.x,下载后配置好web.config里相关的配置,运行install/install.aspx安装,为了保证虚拟主机数据库能够连接数据库服务器,必须自己建立一个数据库,默认为shangducms.

再次申明,我不是高手,对这些东西只有一些自己的理解,欢迎交流!!..

Shangducms NT 设计框架:

原来有个开源的程序,是小孔子,我当初设计的时候根他的那个差不多,都是一个混乱的设计模式,可能这里不能叫设计模式,一个操作,都包含着一个方法,效率和代码上都不是很好,所以我设计了一个简单的框架,就是有一批类,和基类,类主要是用来发布新闻,删除评论,留言等功能,而基类是可以显示UI层的类,主要是用来显示和生成模板用的.这样代码就利用的很多了.

比如一个博客首页页面的代码:

public partial class soundbbg_Default : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    
{
        
try
        
{
            System_blog_PageUI default_page 
= new System_blog_PageUI();
            default_page.Blog_Default_Build(Request.QueryString[
"uid"], Request.QueryString["page"], Request.QueryString["bigclassname"], Request.QueryString["action"], Request.QueryString["tag"], Request["Text1"]);
            Response.Write(default_page.default_template);
        }

        
catch (Exception ee)
        
{
            
//Response.Redirect("fans.aspx");
            Response.Write(ee.ToString());
        }

    }


}


这样就非常简单了,只要调用参数就可以了,不知道这个是不是所谓意义上的3层构架模式,因为网上关于这个3层模式讲的很多,但是都没具体到实现上,所以我就暂时说成3层构架吧.. =.=

在对代码重构的同时,我学习到了很多,也了解到了很多知识,在这里可以说是分享一下吧,其实这个世界上有很多设计模式和重构方法,看的是《重构与模式》一书,但是按照现有的模式,有的时候并不是最完善的方法,比如网页设计,用一个框架,基类,或者是接口,来达到类或对象的相对通信,过多的封装反而让这个类和接口复杂,然后让调用更加麻烦.

在代码重构的过程中,其实代码的复杂度,(个人看书认为),并在真正意义上取决代码的长度,有的代码长度很短,短小精悍,有的代码很长,但是就不代表代码冗余,或者复杂,我在重构的过程中希望将过长的代码划分为很多很多的子函数,通过调用来达到目的,但是后来发现这样做,越到后来,反而觉得不知道该怎样去使用了,相反的,回到模式里面去,一个良好的模式让代码的复杂度更加低了.

所以我认为模式和重构反而相辅相成,如果模式好,可能重构会很好,但是不能为了模式而模式,去用一串复杂的代码显示一个hello world,我认为也是不必要的.

返过来到我自己的系统,我在重构的时候,的确发现了前期设计中,(貌似没有前期设计)遗留下来的问题,这个问题导致后来的重构出现了很多复杂的情况,比如生成,同一个类的操作覆盖等情况,当然最后只是基本上解决了,在代码的效率上还有很多有待完善的地方.

于是我想到一个人在根我email交流时候说的,有的时候软件非常适合的思想方式不一定适合网站开发,而网站开发的模式也不一定适合c/s开发,但是往往它们又很相同,现在看来我在某些方面确实可以理解了,希望与大家交流.

ps:最后说一点,这个shangducms NT是一个学生项目,因为我是学生,如果有不好的地方希望能提出意见,虽然我现在写的内容可能很肤浅或者很bc,但是每个人都有成长的过程,希望大家能维护好国内的程序员开发环境(我发现很多"高手"程序员很喜欢攻击"菜鸟"程序员,呵呵,导致很多人都没有学下去的信心了),当然,这个系统也是开源的,而且cs代码都有,原封不动的发布了.希望能获得各位高手们的意见.

带采集,权限分配(精细到页面,设计的不太好,希望指点),新闻,博客,知道(没完善),下载,评论,积分等功能还是有的.

谢谢了.

各位大哥,我已经修改成N层模式了,在测试中,读完了模式与重构和Petshop,感谢大家的意见!

我的mail soundbbg@live.cn
Add your comment

27 条回复

  1. #1楼 Howard Queen      2008-03-07 13:42
    可做过压力测试?似乎前台、后台交缠在一起。
    我当前的个人认识:前台“越静态越好”;用户数达到一定规模,并发性成了瓶颈。
    我个人不主张过多的使用动态页面,我看你所有请求都通过一个中间人转交,似乎有性能问题。
    可能我理解的不对,总体说来你有自己的想法(主见)是好事。
    共同进步!
      回复  引用  查看    
  2. #2楼 Share赖      2008-03-07 13:44
    很支持,分享是一种美德!
      回复  引用  查看    
  3. #3楼 北京SEO网站优化[未注册用户]2008-03-07 13:47
    插件式的开发吧,我最近也在研究这个,没找到什么好的解决方案
      回复  引用    
  4. #4楼[楼主] guojing      2008-03-07 13:53
    在web.config里的配置 active = 1 的话 会完完全全静态
    但是完完全全静态的话会有一个问题,就是ajax等就不能用了,这些地方还是动态页面完成 active=0的话 就会伪静态 都可以使用 看你喜欢什么了

    ps:这个解决方案一直在摸索,希望能够互相交流 呵呵
      回复  引用  查看    
  5. #5楼 kwklover      2008-03-07 14:33

    我的个人看法:
    1,专注与一个方面,比如CMS,BLOG,SHOP只做一个方面。这样才能做的更好
    2,定位,面向不同领域设计也不一样。
    3,CMS的关键不是什么静态化。静态化只是很重要的一个方面
    4,我自己认为一个CMS主要有:
    4.1 , 模板引擎:决定UI和数据,代码的耦合程度。
    4.2 , 信息组织方式,信息模型,功能模块体系。
    4.3 , 权限管理体系。
    4.5 , 配置管理。
    4.6 , 插件体系。
    4.7 , 内容检索引擎。
    4.8 , 文件存储方式,包含目录结构,特别目录结构和信息结构不能直接对应。

    以上是个人的看法。比较粗糙。
      回复  引用  查看    
  6. #6楼 torome      2008-03-07 14:51
    支持楼上
      回复  引用  查看    
  7. #7楼 怪怪      2008-03-07 15:31
    LZ太不自信啦, 有什么就说, 不用怕。 我以前也怕人家看笑话什么的, 现在也怕, 但其实这个是最无所谓的事情。如果真碰上哪种比你多干两年的人, 他们多说两句, 你就当人家是好意鞭策就行啦~
      回复  引用  查看    
  8. #8楼 ongbin      2008-03-07 16:34
    --引用--------------------------------------------------
    怪怪: LZ太不自信啦, 有什么就说, 不用怕。 我以前也怕人家看笑话什么的, 现在也怕, 但其实这个是最无所谓的事情。如果真碰上哪种比你多干两年的人, 他们多说两句, 你就当人家是好意鞭策就行啦~
    --------------------------------------------------------
    对极,不要怕别人笑话~
      回复  引用  查看    
  9. #9楼[楼主] guojing      2008-03-07 16:43
    谢谢..

    刚才有几个人加我了,对我的一些设计做了质疑,不过也提出了一些建议,感谢你们
      回复  引用  查看    
  10. #10楼 浪子      2008-03-07 16:54
    呵呵,同意怪怪看法.

    guojing说得客套话有点过了,只要实事求是,不要自命清高,能接受相同的不同的意见就可以了,没必要一而再再而三的"谦卑"下去.

    --引用--------------------------------------------------
    怪怪: LZ太不自信啦, 有什么就说, 不用怕。 我以前也怕人家看笑话什么的, 现在也怕, 但其实这个是最无所谓的事情。如果真碰上哪种比你多干两年的人, 他们多说两句, 你就当人家是好意鞭策就行啦~
    --------------------------------------------------------
      回复  引用  查看    
  11. #11楼 韩[未注册用户]2008-03-07 17:13
    --引用--------------------------------------------------
    怪怪: LZ太不自信啦, 有什么就说, 不用怕。 我以前也怕人家看笑话什么的, 现在也怕, 但其实这个是最无所谓的事情。如果真碰上哪种比你多干两年的人, 他们多说两句, 你就当人家是好意鞭策就行啦~
    --------------------------------------------------------
    严重同意,支持你的人多的。

    如果有兴趣,我可以把公司的小系统设计的事情交给你设计。
      回复  引用    
  12. #12楼[楼主] guojing      2008-03-07 17:32
    刚才有个人给我推荐了pet shop,我看了一下petshop的设计,想了一下
    有一点想不明白,我为什么要设计接口...? 感觉好像更麻烦了..不过实现无sql语句好像很具有吸引力.. 努力checking..
      回复  引用  查看    
  13. #13楼 xie[未注册用户]2008-03-07 17:52
    支持楼主。
    但是在命名上我觉得还是需要规范一下,框架毕竟是给别人使用的,不好的命名会使有些人的放弃使用。建议阅读《Framework Design Guidelines(.Net 设计规范)》微软CLR的项目经理Krzysztof Cwalina写的。
      回复  引用    
  14. #14楼 金色海洋(jyk)      2008-03-07 20:17
    简单看了一下代码,感觉经验还是不太够。
    有些需要规范的地方,比如命名方式了。

    哎不说了。有空在细说吧。

    还是多看看好的代码吧。
      回复  引用  查看    
  15. #15楼 金色海洋(jyk)      2008-03-07 20:25
    代码不是一个人写的吧,风格都不一致。不知道楼上的几位有没有看博主的代码。
      回复  引用  查看    
  16. #16楼[楼主] guojing      2008-03-07 20:27
    都是我自己写的啊 最近在重构中.. 有的地方肯定还没翻出来
    是有这样的计划
    1.先写好基类
    2.再考虑要不要写接口
    3.再考虑要不要封装
    感谢你的意见,我在看设计规范..呵呵
      回复  引用  查看    
  17. #17楼 金色海洋(jyk)      2008-03-07 21:56
    封装
    这个就不用考虑了吧,一定要用的。

    基类不就是一种封装吗?
    也许我对封装的理解不对吧。

      回复  引用  查看    
  18. #18楼[楼主] guojing      2008-03-07 21:58
    恩 是的啊 封装也是最后考虑的对象了 : )
    还有什么代码混乱等问题最好一起说了,刚好我能有机会好好学习,否则我那个急啊.. 呵呵 想学好点 呵呵
    或者直接搜集好了mail我 soundbbg@live.cn
      回复  引用  查看    
  19. #19楼[楼主] guojing      2008-03-07 22:01
    为什么不能这么快? 我上的msn 用的是windows live mail 呵呵
      回复  引用  查看    
  20. #20楼[楼主] guojing      2008-03-07 22:08
    我加了你 不过没反应 455383101
      回复  引用  查看    
  21. #21楼 HelloCode[未注册用户]2008-03-11 14:53
    刚看了一下你的代码,不知道你学.net多久了,感觉很初级,以前是学asp的吧。
    关于多层结构、面向对象方面可以看一下Subtext跟Community Server 2007的代码。你的代码这些写完全是asp的写法啊。

    另外代码都存在SQL注入的问题,像SQL的应该使用参数的形式。
    例如:
    string strsql = "delete from shang_blog_gbook where bh='" + bh + "'";
    SqlCommand cmd = new SqlCommand(strsql, con);


    应该改成:
    SqlCommand cmd = new SqlCommand("delete from shang_blog_gbook where bh= @bh", con);
    myCmd.CommandType = CommandType.Text;
    myCmd.Parameters.Add("@bh", SqlDbType.VarChar);
    myCmd.Parameters["@Name"].Value = bh

    这样就不会有SQL注入的问题了。
      回复  引用    
  22. #22楼 毁于随      2008-03-11 15:18
    学生时代能写这么多代码,还是相当厉害的.继续努力.
      回复  引用  查看    
  23. #23楼[楼主] guojing      2008-03-11 15:19
    各位大哥,我已经修改成N层模式了,在测试中,读完了模式与重构和Petshop,感谢大家的意见!
      回复  引用  查看    
  24. #24楼 毁于随      2008-03-11 15:27
    --引用--------------------------------------------------
    guojing: 各位大哥,我已经修改成N层模式了,在测试中,读完了模式与重构和Petshop,感谢大家的意见!
    --------------------------------------------------------
    这么快就改完了.厉害.鼓励一下.
      回复  引用  查看    
  25. #25楼[楼主] guojing      2008-03-11 15:29
    呵呵 还不是被逼的.. 园子里的很多人对新手不好,不过很多对新手都挺好的..无论是哪方面的压力都有啊..
      回复  引用  查看    



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1094937




相关文章:

相关链接: