Discuz!NT官方社区

首页 » Web开发 » ASP.net技术讨论 » dizcuz!nt的优秀架构!
nodnt - 2007-4-13 16:15:00
dizcuz!nt的结构真的好优秀啊,不过这当然是你们自己说的了。

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

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

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

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

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

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

如果不是dizcuz!名生在外,公司让调研下是否可用,否则绝对不会去看如何“优秀”的代码。
nodnt - 2007-4-13 16:17:00
奉劝dizcuz你们在成天忽悠之余,还是把产品做好吧,不要拿这么个蹩脚货出来糊弄咱用户!

你如果说代码上有点BUG也就忍了,居然还弄出这种挂羊头卖狗肉的代码出来,只能让人感叹作者之菜。
lee - 2007-4-13 16:53:00
也不能那么死板.而且我觉得这个架构还是不错的.本人.net程序员.谢谢.
另:说人家评价.Text要掂量自己,那么不知道LZ本身有没有掂量自己呢?
虽然我不是官方的人员,但是站在一个客观公正的立场
我想,技术交流,雪人肯定会很赞同的,但是LZ这样话未免...........
nodnt - 2007-4-13 17:31:00
讨论技术,不用虚伪的去掩饰什么,下面是我反编译的关于上面那部分的代码,如果你觉得这样的代码都还有结构可言,那我确实无语了,另关于掂量的问题,对于.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;
        }
nodnt - 2007-4-13 17:44:00
引用:
也不能那么死板.而且我觉得这个架构还是不错的.本人.net程序员.谢谢.



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

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

.net程序员太多太多,堆垃圾代码的.net程序员更多。
搜索 - 2007-4-13 18:08:00
看到Factory就说是工厂类 看到树叶就说是森林
真服了你了
lee - 2007-4-13 19:16:00
不想和LZ讨论那么多,即使DZNT不怎么样,但是你的语气太过激烈了
PS:我虽然从业不久,才毕业一年,设计模式也学过的.学校基础课程.
我只是觉得具体情况具体对待,没必要墨守成规按死路子套.就像我认为CMMI很多适合并不是最优选择一样.虽然公司的CMMI我负责其中一块,并通过了
秀真 - 2007-4-13 21:16:00
恩,LZ说的有一定道理.一般意思是Factory独立一个抽象类,动网的再继承.要符合开闭原则啊?:$
nodnt - 2007-4-13 21:21:00
你如果要钻牛角尖,我也没办法,但如果你看看discuz的代码你还认为他结构优秀,那真的没办法了。

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

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

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

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

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

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

建议作者把.Text的代码拿出来读明白了,再来写,再来评论。
sinius127 - 2007-4-13 22:35:00
我不懂技术,但也来凑热闹,

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

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

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

总之一句话,如果你真关注DZ.NET并对其信心,那么,温柔地鞭挞吧,别一鞭子一道血痕,孩子不是这样教育的
nodnt - 2007-4-14 9:31:00
回楼上,我更多的是失望,因为之前在一次技术大会上见过戴,满以为他们至少能比DVBBS那样的垃圾论坛做得要好很多,后来还给公司推荐说论坛就用他们的吧,然后主动请缨拿来整合,结果却发现代码烂得不是一点半点,就这样的垃圾代码,完全是堆出来的,不要说架构好不好,而是根本没架构可言,至于那些开发方法,并不是我的总结,也不是什么固化的模式,一个产品级的程序,很明显需要在扩展、兼容、健壮这三点做得很好,但在dnt上完全看不到这三点的影子,整个程序就是一片垃圾代码的堆砌。

希望dnt不要偏离了自己的方向,忘记了自己的使命,成天去玩什么资本游戏,迷失了自我,否则总有一天会落得和DVBBS一样的下场。

ps,dnt你还真别开源了,不要把刚入门的技术人员引向一个误区,再造一个垃圾漫天飞的ASP世界。
sinius127 - 2007-4-14 13:13:00
给点时间吧,相信他们对产品是认真的,对用户是负责的,目前来说我对程序的性能和服务还是挺满意的,我已经选择了他就支持到底了,

弱弱的说一句,如果像楼主这样潜心技术研究的朋友能够为论坛提供正面的技术协助,相信DZ.NET的明天会更好
1
查看完整版本: dizcuz!nt的优秀架构!