تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 2 12 آخرآخر
نمايش نتايج 1 به 10 از 17

نام تاپيک: طراحی Forum تحت ASP.Net

  1. #1
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    11 طراحی Forum تحت ASP.Net

    سلام
    با توجه به مباحث در جریان تاپیک ذیل
    forum.p30world.com/showthread.php?t=218457
    تصمیم بر آن گرفتم مقدماتی در حد دانه کوچک گندم، برای طراحی یک تالار گفتگو را در این تاپیک قرار دهم.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    بسته فوق شامل:

    - یک پروژه پاییه ای خالی web
    - یک پروژه dll برای هسته زیرین ترین لایه (معروف به DAL)
    - یک دیتابیس نمونه تحت SQLServer2005

    برای باز کردن برنامه لزوم VS2008 ضروری است، مخصوصاً که در دو خط از کدها از یک سینتکس جدید 2008 استفاده شده، ولی ذات پروژه تا ایجا و فعلاً تحت Framework2.0 است.
    (این سینتکس چندان مهم نیست و فقط کار تایپی را کمی کم میکند.)

    ==========
    توضیح دیتابیس نمونه

    این بانک جداولی برای نگه داری داده های عادی تالارهای گفتگو دارد.

    Forum_Attachs
    نگه داری فایلهای آپلودی کاربران

    Forum_Cultures
    نگه داری برخی تنظیمات کلی چندفرهنگه و چندزبانه

    Forum_Exceptions
    نگه دار آمار خطاهای رخ داده در برنامه برای ارسال به گروه طراح و رفع عیوب در نسخه های اینده.

    Forum_Icons
    آیکونهای اپلود شده برای استفاده در نقاط مختلف سایت.

    Forum_Messages
    نگه دار پیغامهای خصوصی اعضا به یکدیگر

    Forum_Resources
    نگه داری تنظیمات که بر اساس فرهنگ و الگوی نمایش قابلیت ذخیره چندگانه هم دارد.
    تنظیمات مشترک را میتوان تحت استایل و زبان صفر نگه داشت.

    Forum_Sections
    نگه دار نام تالارهای مختلف با قابلیت تودرتویی تالارها

    Forum_SectionsManagers
    مجوزهای امنیتی اعتا شده به کاربران و گروه های کاربری مدیر بریا هر تالار

    Forum_Statistics
    نگه داری ریز آمار دیدارهای سایت (چه صفحه ای، چه تعداد، چه مدت، ip بازدید کنند و...)

    Forum_Statistics_Address
    نگاشت آدرس صفحات سایت به یک عدد، برای کم کردن حجم ذخیره سازی جدول قبلی.

    Forum_Thanks
    نگهداری آمار تشکر از افراد از پستها

    Forum_Themes
    نگه داری اطلاعات کلی در مورد استایلهای مختلف سایت

    Forum_TopicAnswer
    نگهداری رأی کاربران به گزینه های تاپیک های نظرسنجی

    Forum_Topics
    نگه داری کلیه اطلاعات در خصوص تاپیک ها و پستها (به طور مشتکر) حتی ip کاربر در زمان ارسال پست و...

    Forum_TopicsAnswers
    نگهداری نام گزینه های مختلف تاپیکهای نظرسنجی

    Forum_TopicsReadState
    نگهدار آمار تاپیک های ملاحظه شده توسط اعضا.
    (
    آمار این جدول بسته به تنظیمات فقط شامل 7 یا 15 یا 30 روز جاری است و نه بیشتر فرض میشود تاپیک های قدیمی تر از این مدت را همه دیده اند
    )


    Forum_UserGroups
    نگه داری مشخصات گروههای کاربری
    (
    حداکثر 255 گروه
    در بقیه بخش های اعداد زیر 255 نشانگر گروه کاربری هستند
    اعداد بالای 255 نشان گر کد PrimaryKey یک کاربر هستند
    )

    Forum_Users
    اطلاعات اعضا

    طبیعی است که جدوال ناقص هستند و با پیشرفت کار نیازهای بیشتری معلوم خواهد شد و جداول باید گسترش پیدا کنند.


    -----
    فیلدهایی که با آندرلاین شروع شده اند، داده های اساس نیستند، نوعی کش هستند برای سرعت بیشتر.
    مثلاً آمار تعداد پستهایی و تشکر های شده، تشکر کرده و... که یک کاربر دارد.
    این فیلدها همواره و بدون شک با دستورات SQL و View ها قابل تحصیل هستند ولی فیلدهایی که برای کش انتخاب کردم
    - همه گی عددی و کم حجم هستند (چند بایت)
    - میزان آپدید و تغییرشان (که نیاز به Refresh پیدا کنند) به نسبت خواندن و نمایش بسیار پایین است.
    (یک پست جدید یک بار زده میشود ولی شاید هزاران بار دیده شود !)
    - خیلی زیاد خوانده و نمایش داده میشوند.

    برای یک سایت که شاید در یک لحظه هزار کاربر آنلاین داشته باشد، کش کردن این اطلاعات و عدم اجرای دستورات SQL بعضاً Join دار میتواند بازده خوبی داشته باشد.

    برای Refresh هم میتوان از تریگر های خودکار SQLServer استفاده کرد.

    -----
    فیلدهایی که با _ID شروع میشند شاخص هستند، یعنی معمولاً این فیلدها PrimaryKey جدول دیگری هستند و اطلاعات نظیر واقعی در آن جدول قراردارد.
    ==========
    توضیح لایه DAL
    شامل یک فایل dll با نام FDBM مخفف Forum DataBase Manager
    این dll شامل کلیه کدهای در ارتباط مستقیم با بانک است و شامل متدی برای هر Insert و Update و Select و Delete است.

    من برای راحتی بیشتر متدها را Shared گرفته ام ولی اگر در هر مرحله یک Connection و یک وهله از کلاسس ساخته شود و بتوان با هم یک Connection اعمال مختلف را از ریسمان درخواستی جاری رو دیتاها انجام داد شاید بهتر باشد.

    ولی به علت مخزن Connection های داخلی دات نت، شاید هم چندان تفاوتی در کارآیی نداشته باشد.

    کد عمومی تولید Connection جدید در کل سطح سایت درست شده و
    یک نمونه متد Insert و Delete برای جدول ساده Forum_Thanks هم تهیه شده


    ==========
    توضیح پروژه سایت
    خالی تر از آن است که قابل توضیح باشد،
    چند Web.config برای موقعیتهای خاص تولید شده.


    ==================================================
    متاسفانه همانطور که در تاپیک قبلی گفتم من به علت مشکلات زمانی قادر به ادامه کار روی این پروژه نیستم.
    فقط توانستم بستر اولیه فوق العاده ساده ای تولید کنم.
    اگر دوستان مایل بودند میتوانند روی این بستر اولیه طرح را توسعه دهند.

    در صورتی که سوال و یا مشکلی وجود داشته باشد، در همین تاپیک حتماً اگر بلد باشم و بتوانم جواب خواهم داد.

    موفق باشید.
    Last edited by _H2_; 16-04-2008 at 14:11. دليل: لینک جدید دانلود.

  2. #2
    حـــــرفـه ای Ultimator's Avatar
    تاريخ عضويت
    May 2007
    محل سكونت
    NetFrameWork.
    پست ها
    3,239

    پيش فرض

    بستر سازی که عاليه ! ميتونه پروژه خوبی باشه يعنی مطمئنم. سعيمو ميکنم که بتونم يه کارايی بکنم
    البته بدون کمک شما امکان نداره . هنوز خيلی بی تجربه تر از اين حرفاييم! البته منم مشکل زمانی دارم ولی همه ی تلاشم رو ميکنم
    شايد 4000 تا چيز ياد گرفتيم استاد!

  3. #3
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    - اولاً عزیز جان والا من استاد نیستم.
    - دوماً گرچه همچنان من برای این پروژه سرانجامی متصور نیستم ولی حالا که میبینم تا حدودی مورد توجه دوستان قرارگرفته،
    یک کمک دیگر هم میکنم، من برای خودم کلاسس های ثبت خطا را در بهترین شرایط حاضر کرده ام، این امکان را میتوان به Refrence های پروژه اضافه کنم و مخصوص این برنامه بستش دهم.
    با این امکان به سادگی میتوانید گزارشات دقیق خطا و تابع محل وقوع(سینتکس VB یا #C) را با یک خط کد در جدول مربوطه ثبت کنید و یا به سادی در محل مناسب صفحات Admin سایت، تمام گزارشات جاری را برای برسی بیشتر دانلود کنید. (یا اگر برنامه وبی نبود در فایلی ذخیره کنید)

    - سوم با توجه به مباحث موازی در جریان تپیک دیگر، نسخه C#.Net را هم اضافه میکنم.

    دوستان میتوانند کار را ادامه دهند، من نمونه بعدی را برای دانلود با کمی اصلاحات ریز دیگر پس فردا قرار میدهم.

  4. #4
    داره خودمونی میشه H_T_O_A's Avatar
    تاريخ عضويت
    Nov 2006
    پست ها
    118

    پيش فرض

    خدا رو شكر كه بالاخده يه تاپيك براي آموزش ساخت اين گونه سايت ها درست شد. من كه كم كم داشتم نا اميد ميشدم خوشخالم كه اسرارهايي كه كردم به اساتيد به خصوص h2 بالاخره جواب داد
    من از هر دوي شما و كليه اساتيد تشكر مي كنم و در عين حال عاجزانه تقاضا مي كنم مطالب رو جوري مطرح بشه كه ما مبتدي ها هم راحت بفهميم راستش اگه بخوام متوجه بشم كه شما چي ميگيد بايد خيلي به مغزم فشار بيارم كه اون وقت مخم ميتركه. حيف از جووني من نيست
    به هر حال ما دوست داريم از اساتيد كسب فيض كنيم
    Last edited by H_T_O_A; 20-04-2008 at 02:05.

  5. #5
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    از کلیه دوستان شدیداً عضر خواهی میکنم...
    واقعاً کار داشتم و نتوانستم یک لحظه هم به سایت سر بزنم، تا بالاخره امشب توانستم سری بزنم.
    باز عضر خواهی میکنم.
    نسخه جدید را از همان لینک قبلی دانلود کنید. (حجم حدود 2 مگ)

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اصلی ترین تغییر این نسخه
    اضافه شدن نمونه C#.Net برای دوستان #C کار است.
    کلاسس ثبت خطا هم با وراثتی از کلاسس اصلی موجود در DLL به پروژه اضافه شده.
    میتوانید با یک خط کد گزارش خطا را به طور کامل در دیتابیس ذخیره کنید.
    امکان دانلود گزارشات هم با متد مناسبی به فرمت XML و با ساختاری سریع و غیر حجمی (غیر DataSet) وجود دارد که امکان دانلودهای حجم عظیم اطلاعات بدون نگرانی های RAM آلود DataSet را میدهد.

    میتوانید نمونه ای از کد مناسب ثبت خطا را در بخش Forum_Thanks پروژه FDBM ببینید.
    یک متد SELECT هم به Forum_Thanks اضافه شده که خروجی اش DataReader است و به سادگی میتوان برای تولید لیست HTML افراد تشکر کننده از یک پست با سرعت تمام استفاده اش کرد.

    توجه کنید که برای کد تمیز، این مرز بندیها و جدا کردن و به اصلاح لایه بندی مهم است.
    و اگر پروژه بزرگ شود، دچار سردرگمی نمیشوید و راحت تر هم میتوانید کدهای متمرکز شده را تغییر دهید.

    در مورد کد جاری هرسوالی داشتید در خدمت هستم، ولی به علت مشکلات جاری خودم شاید کمی دیر سر بزنم... (شرمنده اخلاق ورزشی....) ولی سعی میکنم هر چه زودتر سربزنم.

    جمیعاً میبخشید، موفق باشید و خدانگه دار.

  6. #6
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام مجدد
    عاجزانه تقاضا مي كنم مطالب رو جوري مطرح بشه كه ما مبتدي ها هم راحت بفهميم
    به دستور شما، من جفنگیات خودم را که نوشته بودم یک بار بازخوانی کردم.
    چندین غلط تایپی املایی پیدا کردم ! (چه کشف بزرگی ... !)
    ولی نکته ابهامی ندیدم...
    فقط به نظرم آمد شاید برخی دوستان با تریگرهای SQLServer آشنا نباشند.
    تریگرها کدهای هستند که به طور خودکار با وقوع یک رویداد در داخل هسته خود SQLServer اجرا میشوند.
    مثلاً شما میتوانید یک تریگر تعریف کنید تا به محض اینکه سطری از جدول پستها اضافه یا حذف شده، با توجه به سطر، کاری انجام شود. مثلاً در مورد کار ما، شاید نیاز باشد فیلدهای آندرلاین دار گفته شده یک فرد که شامل تعداد پستها است از نو Refresh شود.

    بجز این مبحث دیگر جایی برای ابهام نمی بینم.
    بالاخره شمایید که باید بگویید با چه جمله ای یا کدی مشکل دارید و متوجه نمیشوید یا به نظرتان افتضاح است و راه بهتری دارد و.... تا من و بقیه دوستان بتوانیم جوابی دهیم و گرنه من تا چند روز پیش یک کلاسس ماژول علم لدونی داشتم، که متاسفانه در بقالی سر کوچه گمش کردم !
    Last edited by _H2_; 24-04-2008 at 01:45.

  7. #7
    داره خودمونی میشه H_T_O_A's Avatar
    تاريخ عضويت
    Nov 2006
    پست ها
    118

    پيش فرض

    استاد تو اين دو تا پست خيلي شاد بوديدا. نكنه خبريه؟ آخه خودتونم ميگيد چند روز نميام يه كم مشكوكه...
    والله روند كاري من از درس دادن شما خيلي كند تره چون سرم شلوغه و كم وقت ميكنم روي پروژه شما تمرين كنم پس حداقل از طرف من خاطر جمع باشيد
    اما سعي مي كنم وقتمو آزاد كنم(واس من خبري نيستا فكر بد نكنيدا) پي كار و يك سري مشكلات شخصي كه تمام وقتمو گرفته چند روزي درگيرم
    بنده به خودم اجازه نميدم به شما و اساتيد ديگه دستور بدم(ما جايگاه استاد و شاگردي حاليمونه)
    مطمئين باشيد سوالات زيادي دارم كه از محضرتو بپرسم
    يا هو
    Last edited by H_T_O_A; 24-04-2008 at 03:23.

  8. #8
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    اولاً هر موقع استاد شدم، مطمئن باشید خبرتون میکنم.
    خيلي شاد بوديدا. نكنه خبريه؟
    خبری جز بدبختی و بیچارگی و زندگی شهری نیست. خیالتان جمع جمع.
    چیه؟ میخواهید از آیکون های دپرس استفاده کنم تا همه مثل خودم بشن؟؟؟!!!!
    این هم چند آیکون جدید.... !!!





    مطمئين باشيد سوالات زيادي دارم
    در خدمت هستیم.

  9. #9
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    با توجه به یک سری گفتگوها در سطح pm (با یکی از دوستان)، نتیجه بر آن شده که یک نمونه کد فوق العاده ساده جهت ثبت آمار بازدیدها از تاپیک ها ایجاد شود.
    در همین راستا متد فوق العاده ساده CounterValue_Increment در کتابخانه FDBM اضافه کردم.
    که StoredProcedure ای با نام Forum_Topics_CounterValue_Increment را صدا میزند.
    گرچه هم خودش و هم دستور SQL ظاهر ساده ای دارد ولی هیچ مشکلی با چند ریسمانی و اجرای همزمان از ریسمان های متعدد ندارد.
    (SQLServer صحت داده ها را در زمان دستور UPDATE با کمک قفلهای درونی تضمین میکند)

    امثال این متدها جای کار دارد، ولی نمونه جاری ساده و قابل فهم است،
    مثلاً برای یک سایت پرحجم و پربازدید...
    - میتوان شمارنده ای محلی در RAM داشت که اتصالات به SQLServer را کاهش دهد و هر 1 یا 2 یا 5 دقیقه یک بار و با یک تک دستور SQL گروهی عمل آپدید شمارنده های سرور را در یک واحد اجرا، انجام داد.
    - یا امکان استفاده از سرویس صف و زمانبندی بروکر هم وجود داشت.
    ...
    ولی همین روش جاری هم خیلی خوب است و با توجه به استفاده از StoredProcedure و نیز دستور ساده SQL ، نتیجتاً سرعت و بازده بالایی دارد.




    یک متد نمونه جهت تولید html برای لیست تشکرها در زیر پست افراد هم، نوشتم.
    این متد با نام HtmlRender در کلاسس Forum_Thanks در FEng تعریف شده. (Forum Engine)
    در اصل به همین بهانه بحث لایه بندی را تکمیل تر کردم و FEng را هم اضافه کردم.
    این dll جدید شامل تمام کدهای میانی بین لایه دیتای FDBM و لایه نمایشی FUI است.
    میتوان گفت تمام کلاسسهای اصلی برنامه در این لایه جدید قرار خواهند گرفت که این لایه با کمک ارتباط با لایه دیتابیسی FDBM و لایه نمایشی FUI جریان اطلاعات را هدایت و بعضاً تبدیل میکند.
    مثل همین متد HtmlRender که شاید بتوان گفت نوعی تبدیل است، که DataReader مطلوب لایه FDBM را به TextWriter مطلوب لایه FUI میریزد یا تبدیل میکند.





    یک ایراد هم در دیتابیس رفع شد.
    فیلد ID_Culture از جدول Forum_Cultures و LCID از جدول Forum_Users را برای یک کار در نظر گرفته بودم که متاسفانه به علت عجله نامشان یکسان نبود.
    در نهایت با توجه به معنی واضح تر، فیلد ID_Culture جدول Forum_Cultures به نام جدید LCID تغییر پیدا کرد.




    باید بگم از این روند متدهای static) Shared در C#.Net) هم چندان راضی نیستم، به نظرم برای روند کلی و احترام بیشتر و موٍثر تر به ذات OOP باید استفاده از این متدها به حداقل ممکن و فقط برای مواقع منطقی تر معطوف کرد، تا بتوان از مزایای بی مثال وراثت و چندریختگی استفاده کرد.
    این روش جاری راحت است ولی خیلی میبخشید نوعی ماست مالی کردن کار است.
    دلم نمیخواهد با این پروژه ناچیز مروج دشمنی با OOP پرچیز باشم. (این OOP نفس من بید!!!)
    ولی بحثی که وجود دارد سادگی کدهای فعلی (با Shared) و قابل فهم راحت تر بودن آنها است.
    سعی میکنم در وقت آزادی (اگر پیدا کردم !) پروژه را به یک طرح ساده و قابل فهم آسان و با تطابق بیشتری با OOP پیاده سازی کنم.
    گرچه چندان پروزه مهمی نیست ولی چند مطلب ریز دیگر هم وجود دارد، که با وضع جاری چندان خوشم نمی آید، و به نظرم باید اصلاح شوند.
    (انشا... یک آپلود دیگر هم خواهیم داشت.)




    اگر بتوان لینکی از این تاپیک در تالار Framework هم قرار بگیرد شاید بد نباشد، احتمالاً، شاید، ممکن، چند نفر از دوستان وقت داشته باشند و از تاپیک های اینچنینی هم بدشان نیاید.
    (شاید هم دفعه بعد خودم انجام دهم.)



    در آخر به عنوان یک هشدار مهم یادآوری میکنم از اشیای پر حجمی مثل DataTable و DataSet به هیج وجه در طراحی های سایت استفاده نکنید.

    نمونه جدید را میتوانید از همان لینک اخری دانلود کنید.

  10. #10
    حـــــرفـه ای Ultimator's Avatar
    تاريخ عضويت
    May 2007
    محل سكونت
    NetFrameWork.
    پست ها
    3,239

    پيش فرض

    سلام
    خیلی ممنون که هنوز یادتون نرفته به زودی من کمی وقت پیدا میکنم و یکارایی میکنم ! پروژه رو هنوز ندیدم ولی توضیحاتتون واضح بود .
    یه چیزی !
    باید بگم از این روند متدهای static) Shared در C#.Net) هم چندان راضی نیستم، به نظرم برای روند کلی و احترام بیشتر و موٍثر تر به ذات OOP باید استفاده از این متدها به حداقل ممکن و فقط برای مواقع منطقی تر معطوف کرد، تا بتوان از مزایای بی مثال وراثت و چندریختگی استفاده کرد.
    این یعنی shared تعریف کردن متدها بده ؟ من تا حالا همیشه متد ها رو shared تعریف میکردم ! تا اینجایی که سوات من قد میده میدونم که برای استفاده از متد shared نیازی به ایجاد یک instance از کلاس نیست .
    خوب بازم 4 تا چیز یاد گرفتیم
    مرسی .

صفحه 1 از 2 12 آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

برچسب های این موضوع

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •