Discuz!NT 2.5 正式版 下载
beta、RC版升级补丁
Comsenz 招聘信息
首届Discuz!NT 模板大赛圆满结束
著名音乐网站SoGua网、分贝网
采用Discuz!NT搭建社区
FIFA Online2官网论坛使用Discuz!NT
游戏城寨论坛使用Discuz!NT搭建
第二届优秀版主评选揭晓
Discuz!NT 2.5正式开源 Discuz!NT文档中心
用户整合说明文档
Discuz!NT亮相微软Tech-Ed 2007
Discuz!NT情景搞笑短片抢先看
1/2页12 跳转到查看:4108
发新话题 回复该主题

dizcuz!nt的优秀架构!

dizcuz!nt的优秀架构!

dizcuz!nt的结构真的好优秀啊,不过这当然是你们自己说的了。

Discuz.Forum.UserFactory.CheckDvBbsPassword,这个是dizcuz!nt代码中的一个方法吧,如此优秀的代码,恐怕也只有你们能写出来,差点把大牙给我笑出来,居然还好意思说什么.Text的结构太不好之类的话。

首先Discuz.Forum.UserFactory的语意说明这是一个工厂类,我真想问问作者,你知道工厂的意思是什么吗?
CheckDvBbsPassword看意思是用来检查从dvbbs过来的密码的吧,大约是dvbbs没有按照md5的标准方式编码密码,所以需要这么一个东西。

很明白了,既然是工厂类,那么针对dvbbs的一些东西是否应当是某一个生产类的实际代码呢?

怎么可能在工厂方法中直接写死,如此写法还叫什么工厂,还有什么意义,还谈什么扩展性?就为了看起来漂亮一点?忽悠下初学者?让他们觉得你们还用到了“工厂模式”?

不过奉劝作者,在放出什么优秀结构之前,讲评.Text的结构之前,先拿捏下自己的水平!!连工厂模式的意义都没弄明白,就喊天喊地的,先买点基础书看看明白吧!

这就是dizcuz!nt的“优秀结构”,用户不懂技术,就瞎忽悠吧!!

如果不是dizcuz!名生在外,公司让调研下是否可用,否则绝对不会去看如何“优秀”的代码。

TOP

 

回复:dizcuz!nt的优秀架构!

奉劝dizcuz你们在成天忽悠之余,还是把产品做好吧,不要拿这么个蹩脚货出来糊弄咱用户!

你如果说代码上有点BUG也就忍了,居然还弄出这种挂羊头卖狗肉的代码出来,只能让人感叹作者之菜。

TOP

 

回复:dizcuz!nt的优秀架构!

也不能那么死板.而且我觉得这个架构还是不错的.本人.net程序员.谢谢.
另:说人家评价.Text要掂量自己,那么不知道LZ本身有没有掂量自己呢?
虽然我不是官方的人员,但是站在一个客观公正的立场
我想,技术交流,雪人肯定会很赞同的,但是LZ这样话未免...........
最后编辑lee 最后编辑于 2007-04-13 16:56:04

TOP

 

回复:dizcuz!nt的优秀架构!

讨论技术,不用虚伪的去掩饰什么,下面是我反编译的关于上面那部分的代码,如果你觉得这样的代码都还有结构可言,那我确实无语了,另关于掂量的问题,对于.Text我承认他的结构不是不错的,细节有部分处理得不恰当,但是作者的水平还是很强的,至于discuz的这些代码,让人看了后,说实话,撑死也就是.net培训班刚出来的水平,毫无技术成分可言,本人不才,水平有限,但即便回退两年,也绝不至于写出这样的代码。

namespace Discuz.Forum
{
    using Discuz.Common;
    using System;
    using System.Data;
    using System.Data.OleDb;
    using System.Runtime.InteropServices;

    public class UserFactory
    {
        public static int CheckDvBbsPassword(string username, string password)
        {
            OleDbParameter[] commandParameters = new OleDbParameter[] { Database.MakeInParam("@username", OleDbType.Char, 20, username), Database.MakeInParam("@password", OleDbType.Char, 0x20, Utils.MD5(password).Substring(8, 0x10)) };
            OleDbDataReader reader = Database.ExecuteReader(CommandType.Text, "SELECT TOP 1 [uid], [password] FROM [" + BaseConfigFactory.GetTablePrefix + "users] WHERE [username]=@username", commandParameters);
            int uid = -1;
            if (reader.Read())
            {
                string text = reader["password"].ToString().Trim();
                if (text.Length > 0x10)
                {
                    if (Utils.MD5(password) == text)
                    {
                        uid = Utils.StrToInt(reader["uid"].ToString(), -1);
                    }
                }
                else if (Utils.MD5(password).Substring(8, 0x10) == text)
                {
                    uid = Utils.StrToInt(reader["uid"].ToString(), -1);
                    UpdateUserPassword(uid, password);
                }
            }
            reader.Close();
            return uid;
        }

        public static int CheckDvBbsPasswordAndSecques(string username, string password, int questionid, string answer)
        {
            OleDbParameter[] commandParameters = new OleDbParameter[] { Database.MakeInParam("@username", OleDbType.Char, 20, username), Database.MakeInParam("@password", OleDbType.Char, 0x20, Utils.MD5(password).Substring(8, 0x10)) };
            OleDbDataReader reader = Database.ExecuteReader(CommandType.Text, "SELECT TOP 1 [uid], [password], [secques] FROM [" + BaseConfigFactory.GetTablePrefix + "users] WHERE [username]=@username", commandParameters);
            int uid = -1;
            if (reader.Read())
            {
                if (reader["secques"].ToString().Trim() != ForumUtils.GetUserSecques(questionid, answer))
                {
                    return -1;
                }
                string text = reader["password"].ToString().Trim();
                if (text.Length > 0x10)
                {
                    if (Utils.MD5(password) == text)
                    {
                        uid = Utils.StrToInt(reader["uid"].ToString(), -1);
                    }
                }
                else if (Utils.MD5(password).Substring(8, 0x10) == text)
                {
                    uid = Utils.StrToInt(reader["uid"].ToString(), -1);
                    UpdateUserPassword(uid, password);
                }
            }
            reader.Close();
            return uid;
        }

TOP

 

回复:dizcuz!nt的优秀架构!

引用:
也不能那么死板.而且我觉得这个架构还是不错的.本人.net程序员.谢谢.



不是我死板,你如果反对,你如果觉得结构不错,你解释下为什么会这样写!

另外你如果觉得你的回复很客观很公正,我只能说你也根本不懂什么叫结构。

.net程序员太多太多,堆垃圾代码的.net程序员更多。
最后编辑nodnt 最后编辑于 2007-04-13 17:46:48

TOP

 

回复:dizcuz!nt的优秀架构!

看到Factory就说是工厂类 看到树叶就说是森林
真服了你了

TOP

 

回复:dizcuz!nt的优秀架构!

不想和LZ讨论那么多,即使DZNT不怎么样,但是你的语气太过激烈了
PS:我虽然从业不久,才毕业一年,设计模式也学过的.学校基础课程.
我只是觉得具体情况具体对待,没必要墨守成规按死路子套.就像我认为CMMI很多适合并不是最优选择一样.虽然公司的CMMI我负责其中一块,并通过了

TOP

 

回复:dizcuz!nt的优秀架构!

恩,LZ说的有一定道理.一般意思是Factory独立一个抽象类,动网的再继承.要符合开闭原则啊?

TOP

 

回复: dizcuz!nt的优秀架构!

你如果要钻牛角尖,我也没办法,但如果你看看discuz的代码你还认为他结构优秀,那真的没办法了。

至于CMMI,那玩意在抑制创新,我只能这么评价。

大学毕业一年了,如果你大学是学的本专业,那么连学带做有五年了,连这样一个结构就说优秀,你让我说什么好呢?当然了,通常大学四年大家都不会去学太多专业知识。

学过设计模式,那你就稍微扫一遍DNT的代码,说实话要是我写的,我连拿出来见人都觉得不好意思。

对DVBBS的密码检查居然是写死的方法,千万不要告诉我这是为了性能。

对数据库的操作,N条SQL直接放入所谓的Factory中,满篇的Factory,生怕别人不知道他是Factory了的,但其实根本不是。

对ACCESS和SQL两个数据库的支持,居然还需要两个版本的程序来支持,这还叫优秀架构?

建议作者把.Text的代码拿出来读明白了,再来写,再来评论。

TOP

 

回复:dizcuz!nt的优秀架构!

我不懂技术,但也来凑热闹,

楼主是恨铁不成钢,看来也是仔细钻研过的

但很显然,楼主从业已久,经验十足,.有一套自己成型的,固定的开发思路,可能也取得了不错的业绩,并以此来衡量一套系统的优劣.这个先放一边,但楼主批评的语气真有些过激了,如果觉得程序有什么问题,设计有不妥,如果愿意可以积极的同官方人员沟通,交流.相信雪人,戏水他们会有开放的心怀的,眼下以这样的语气进行攻击感觉有点过激了,(个人觉得可能是楼主盯住了官方推广文章的一些措辞,感觉不爽)

没必要的嘛,觉得好就用,像我这样的,不懂技术,看不明白代码,但能够得到官方人员的帮助,热情排除疑难,感觉就很,必竟弄个论坛时不时出个意外也是很正常的,能够得到官方的技术支持,还是挺知足的,也很感激的,咱只是个免费用户而已

总之一句话,如果你真关注DZ.NET并对其信心,那么,温柔地鞭挞吧,别一鞭子一道血痕,孩子不是这样教育的

TOP

 
1/2页12 跳转到
发表新主题 回复该主题