الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

شارك في تطوير أحد المشاريع الكبيرة

مغلق
بدأه Usama Fayez في 17 يناير 2006 · 14 رد · 1,569 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هل مللت من المشاريع البرمجية الصغيرة ؟

هل لا تملك الوقت لتطوير مشاريع كبيرة ؟

هل تريد أن تشارك في تطوير مشروع برمجي كبير ؟

إذن فأرجو منك المشاركة هنا

لقد قررت من بضعة أيام أن أبدأ في تطوير مشروع هو عبارة عن برنامج لتطوير مشاريع الويب ك Front Page و Dreamweaver و إن شاء الله سيحتوي على WYSIWYG Editor و ٍScript Editor with Syntax Highlighting و Page Preview و سيتم تمكين عمل Plugins للمشروع حتى يكون العمل الجماعي سهل و يكون من السهل تطويره و إضافة المزيد من المميزات له لاحقا

و سأقوم بوضع جميع مواصفات المشروع و معاييره هنا و لكن أرجو أولا من الأخوة التجاوب و المشاركة و أرجو لكل من يرى أنه قادر على المشاركة في مشروع كهذا و يود أن يشترك أن يشارك هنا

ملحوظة: المشروع مجاني و مفتوح المصدر بالطبع

تم تعديل هذه المشاركة بواسطة usama707 في 17 يناير 2006 في 19:16

#2

السلام عليكم ورحمة الله وبركاته

المشروع حلو ولكن معقد ويحتاج الي الغمل كبير ولا يفيد في شيء سواء اضفات بسيطة اختر موضوع تخرج ابسط

#3

شكرا على الرد لكن صدقني المشروع مش معقد ولا حاجة

هو بسيط و بالذات بعد توزيع المهام و أنا رأيي إن أي مبرمج بمستوى متوسط يقدر يشارك فيه

أنا حكتب مخطط المشروع بس عايز أشوف مشاركة و حماس أكبر من الأعضاء

ملحوظة صغيرة: هذا ليس مشروع تخرج أو شيء من هذا القبيل (أنا لسه داخل الكلية أعمل مشروع تخرج ليه :D )

لكني أردت أن أختصر الوقت لعمل هذا المشروع و أردته أن يكون عمل جماعي

كما أني بدأت في عملية التطوير الفعلية ولا أجده بهذه الصعوبة

تم تعديل هذه المشاركة بواسطة usama707 في 17 يناير 2006 في 20:32

#4

ضع المخطط انا باذن الله من اوائل المتوجديد معك

#5

و انا جاهز

#6

شكرا لكم يا شباب على المشاركة :)

بسم الله الرحمن الرحيم

المشروع إسمه حتى الأن WebDeveloper

المشروع بيحتوي عل 4 مشاريع فرعية أساسية و قابلة للزيادة

نبدأ بأول مشروع

أول مشروع إسمه Lib و كما واضح من إسمه فهو عبارة عن مجرد مكتبة تتضمن بعض الدوال و الموارد التي يحتاجها البرنامج

و يحتوي على Class إسمه Project يحتوي على البيانات التي يحتاجها أي مشروع يصممه المستخدم بالبرنامج النهائي و يتم تخزين أي مشروع تم عمله بالبرنامج بالإمتداد .wdp

و يتم عمل Serialization لأي Object من النوع Project لتخزينه في صورة ملف wdp

الأن ماذا يحتوي الكلاس Project

يحتوي هذا الكلاس على مجموعة Properties هي

public int Version
public string Name
public Folder MainFolder

و كما ترون فإن Version يمثل إصدار البرنامج الذي تم عمل المشروع به (في حالة تم عمل إصدارات أخرى من WebDeveloper)

و تم إسناده للقيمه 1.0.0.0

Name هو إسم المشروع و هو أي إسم يختاره المستخدم للمشروع الذي يقوم بتصميمه بإستخدام WebDeveloper

و لكن ما هو _MainFolder

هو عبارة عن كائن من النوع Folder الذي قمت بتصميمه و هو يمثل مجلد يمكن أن يحتوي على مجلدات فرعية و ملفات و المجلدات الفرعية يمكن أن تحتوي بدورها على مجلدات فرعية أخرى و ملفات في حال أراد المستخدم تقسيم المشروع الذي قام بعمله إلى عدة مجلدات و ملفات

نبدأ بالكلاس File

يحتوي الكلاس File على عدة Properties

public string Name
public Folder Parent
public string Path

و هما يمثلا إسم الملف و المجلد الذي يحتوي هذا الملف

و Path يعود بقيمة تمثل المسار الكامل للملف أي أنه مثلا إذا كان الملف إسمه Style.CSS و موجود في مجلد إسمه Styles و المجلد Styles موجود في مجلد أخر إسمه CSS فإنه يعود بقيمة هي CSS\Styles\Style.CSS

والأن إلى الكلاس Folder

يحتوى الكلاس Folder على

public string Name
public Folder Parent
public string Path
public void Add(Folder Folder)
public void Add(File File)
public Folder[] SubFolders
public File[] Files
public Folder GetFolder(string FolderName)
public File GetFile(string FileName)
public bool Remove(File file)
public bool Remove(Folder folder)

Name يمثل إسم المجلد

Parent يمثل المجلد الأب الذي يحتوي هذا المجلد

Path يعود بالمسار الكامل للمجلد

Add يستطيع إضافة كائن من النوع File أو من النوع Folder للمجلد

Files يعود بمصفوفة من النوع File تمثل الملفات المحتواة في المجلد

SubFolders يعود بمصفوفة من النوع Folder تمثل المجلدات الذي يحتويها هذا المجلد

GetFolder تبحث عن Folder داخل المجلد و إذا وجدته فإنها تعود به وإلا فإنها ستعود ب null

GetFile تفعل نفس الشي و لكن ل File

Remove تقوم بحذف مجلد أو ملف

والأن ماذا سيحدث ؟؟؟

سيمكن WebDeveloper عمل قوالب مختلفة للمشروع كل قالب هو عبارة عن ملف Dll :blink:

قد تتعجبوا من هذا و لكني و جدتها الطريقة الأمثل و سيتم توضيح هذا لاحقا

و عندما يختار المستخدم مشروع جديد و يختار الTemplate المطلوب فيرسل WebDeveloper لل Template إسم المشروع و مساره حفظه

و سيقوم ال Template بإستخدام Wizards (إن كانت مطلوبة) و ينشأ ملفات المشروع و ينشء كائن من النوع Project و يخزن فيه الإصدار و إسم المشروع و يخزن فيه أسماء المجلدات و الملفات الفرعية

و عندما يغلق المستخدم البرنامج و يفتحه مره أخرى و يقوم بعمل فتح لملف المشروع فإن البرنامج سيعمل Deserialization للملف ليقوم بإسترجاع كائن من النوع Project و يقوم بمقارنة الإصدار و يقوم أيضا بالبحث في الملفات و المجلدات و يتأكد أنها موجودة فعلا ثم يضيفها لقائمة الملفات لتظهر في البرنامج حتى يستطيع المستخدم التعامل معها

و هذا كيف يتم إستخدام الكلاس Project

using System;
using System.Collections.Generic;
using System.Text;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Lib.Project project = new Lib.Project("WebSite");
            Lib.Project.Folder CSS = new Lib.Project.Folder("CSS");
            project.MainFolder.Add(CSS);
            project.MainFolder.Add(new Lib.Project.Folder("Images"));
            CSS.Add(new Lib.Project.File("Style.CSS"));
            project.MainFolder.GetFolder("Images").Add(new Lib.Project.File("logo.gif"));
        }
    }
}

هذا الكود مثلا ينشيء مجلدين هما CSS و Images

و يضع ملف Style.CSS في المجلد CSS و يضع logo.gif في images

ملحوظة: هذا الكود لا ينشيء الملفات فعلا على الجهاز هو فقط ينشيء كائنات في الكائن Project توضح أن هذه الملفات قد تكون موجودة في المشروع و لكن التحكم الفعلى في إنشاء الملفات على الجهاز و حذفها و ما إلى ذلك فسيقوم به أجزاء أخرى من المشروع و لكن هذا الجزء ما هو إلا طريقة لتخزين بيانات أي مشروع يصممه المستخدم في ملف wdp

و تم و الحمد لله إنهاء جزء بسيط و لكنه مهم و أساسي و أرجو أن تكونوا قد استوعبتموه و سأشرح لاحقا جزء أخر من المشروع و كيف يتم عمل Templates لإستخدامها في المشروع

Project.zip

تم تعديل هذه المشاركة بواسطة usama707 في 18 يناير 2006 في 12:17

#7

السلام عليكم ورحمة الله وبركاته

شكرا للاستاذ

ولكنت ان روح الفريق انت لم تترك شيء للطلبه في الواجب يا استاذ

#8

صبرك على :D فهذه الأساسيات هي قلب المشروع و كنت قد صممتها و يجب أنا نفهما جميعا جيدا لذا فإني أضعها و أشرحها أولا و نستطيع أن نتناقش فيها و نعدل أي شيء و بعد وضع هذه القواعد سنجد الكثير من العمل بحيث لا نستطيع أن نجاريه :D فنحن الأن في مرحلة التخطيط و التصميم و ما سبب فشل المشاريع السابقة إلا سوء التخطيط

#9

ملحوظة: بينما أقوم بوضع قواعد المشروع لا يضر أن يقوم المشاركين بعمل بحث صغير عن أي شيء له علاقة بالمشروع كعمل Syntax Highlighting و ما إلى ذلك

#10

السلام عليكم ورحمة الله وبركاته

أخي العزيز اسامة احييك على فكرة المشروع لأنها فكرة جميلة ، لأنك سوف تتعلم منها الكثير جدا في البمجة عامة

صحيح أني لا أملك وقت لكي أساعدك في هذا المشروع ، ولكن أنا أأويدك في تنفيذ هذا المشروع ولكن لا تهتم بقلة المشاركات أو التجاوبات معك بخصوص هذا المشروع فاسعى على بركة الله

إذا كنت تريد إنشاء مشروع كبير وذو قيمة أولا يجب أن ترسم له خطة على ورق وبعدها تقوم بإنشاء ملف Documentation عن البرنامج ثم تقوم برسم تصوري لفكرة البرنامج وما هي جميع الأجزاء بالبرنامج ثم تقوم برسم FlowChart بسيط عن الفكرة العامة.

وهكذا ليتم مشاركة الأعضاء معك في البرنامج على أساس ونور .

أما إذا بدأت بإقتراحات وأكواد وتخيلات كودية من أولها فلن يستمر معك البرنامج لمدة أكثر من نصف سنة ولن تستطيع أن تكملة.

لذلك أدعوك أن تبدأ بداية صحيحة .

جزاكم الله خيرا

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#11

انا جاهز للمشاركه ان شاء الله

#12

السلام عليكم ورحمة الله وبركاته

انا اقيد الاستاذAhmed H. Alawady في رايه السفينة ذات القائدين تغرق

ضع تحليلا كامل للمشروع ككل ثم قسمها الي مشريع صغير ووظائف عامه

#13

شكرا لكم جميعا و لكني أريد أن أوضح شيء صغير

المشروع بالفعل مقسم إلى عدة مشاريع و قد ذكرت ذلك بالأعلى

و هذا لم يكن إلا واحد منهم و أردته فقط أن يكون مقدمة لعمل قوالب لمشاريع الويب لأن الموضوع بسيط و بمجرد أن أشرح الInterface البسيطة الخاصة بالقوالب فيمكن لبعض الأخوة المهتمين ببرمجة الويب إنشاء قوالب لمشاريع WebDeveloper بينما نعمل نحن عليه و لكن على العموم WebDeveloper يتكون من

WebDeveloper: يمثل الواجهة الرئيسية للبرنامج و سيقوم بإدارة ملفات المشاريع و الPlugins و ال Templates

TemplateInterface: هو عبارة عن مشروع صغير يتضمن الواجهة التي يجب أن يحتويها أي Template Plugin أي أن القوالب الجاهزة التي ستكون موجودة في WebDeveloper كل قالب منها عبارة عن dll plugin يقوم بعمل Implement لهذه الواجهة ليوفر بعض الخصائص و المعلومات عن القالب كإسمه و أيقونه له و حدث رئيسي يقوم بإنشاء الملفات و سيتم شرحه لاحقا

EditorInterface: أولا Editor يرمز إلى أي محرر كمحرر HTML أو CSS و كل Editor سيكون في ملف Dll مستقل خاص به و كل Editor لابد أن يعمل Implement لل Interface التي في هذا المشروع و تحتوي هذه الInterface على نوع الملفات التي يتعامل معها الEditor و على Toolbar خاص به و ما إلى ذلك و سيتم شرحه أيضا

Lib: هو عبارة عن مشروع يحتوي على بعض الموارد و الدوال التي تحتاجها المشاريع الأخرى و قد تم شرح أحد فئاته و هو Project من قبل

نأتي الأن لشرح واجهة الTemplate

namespace TemplateInterface
{
    public interface ITemplate
    {
        void New(string ProjectName, string FilePath);

        string TemplateName
        {
            get;
        }

        string TemplateName
        {
            get;
        }

        System.Drawing.Icon TemplateIcon
        {
            get;
        }

        int ProjectVersion
        {
            get;
        }
    }

و كما هو واضح فإنها بسيطة جدا

TemplateName: هو إسم القالب الذي يظهر عندما يختار المستخدم مشروع جديد فسيقوم البرنامج بالبحث في مجلد إسمه Templates عن كافة ملفات الdll وسيقوم بالبحث في كل ملف إذا كان يعمل implement لهذه الInterface بالأعلى و إذا كان فإنه يضفه إلى قائمة الTemplates بهذا الإسم

TemplateIcon: هو الأيقونة التي تظهر للقالب و يمكن تخزين أي أيقونة في الResources مثلا ثم يعيد هذه الأيقونة

ProjectVersion: يمثل إصدار البرنامج الذي تم تخصيص هذا القالب له و في الإصدار الأول دائما سيكون 0x01000000

New: يقوم بإنشاء ملفات المشروع بإستخدام هذا القالب في المجلد الذي يوجد فيه FilePath حيث FilePath هو مسار ملف المشروع الذي يتم إرساله إلى هذه الدالة و ProjectName هو إسم المشروع الذي يتم إرساله لهذه الدالة

تقوم هذه الدالة بإنشاء ملفات المشروع و إنشاء كائن من النوع Project الموجود في المكتبة Lib و تقوم بوضع أسماء هذه الملفات و المجلدات فيه و لكن أين يخزن أي قالب الملفات الخاصة به ؟ أقترح أن يقوم مطوروا ال Templates أن قوم بتخزينها في الResources

وسأقوم بشرح مثال بسيط للقالب الرئيسي و لنسميه EmptyProject

using System;
using System.Collections.Generic;
using System.Text;
using Lib;
using TemplateInterface;
namespace EmptyProject
{
    public class EmptyProject : ITemplate 
    {
        #region ITemplate Members

        public void New(string ProjectName, string FilePath)
        {
            Project project = new Project(ProjectName, this.ProjectVersion);
            project.Save(FilePath);
        }

        public string TemplateName
        {
            get
            {
                return "Empty Project";
            }
        }

        public System.Drawing.Icon TemplateIcon
        {
            get
            {
                return Resources.Icon;
            }
        }

        public int ProjectVersion
        {
            get
            {
                return 0x01000000;
            }
        }

        #endregion
    }
}

الأن ما هذا الكود ؟؟؟

لقد قمت بعمل مشروع جديد من النوع ClassLibrary طبعا و قمت بعمل Add Reference للمشروع Lib الذي يحتوي على الفئة Project المستخدمة لتحديد هيكل ملف المشروع و قمت بعمل Add Reference للمكتبة TemplateInterface حتى أستطيع أن أعمل Implement لل Interface الخاصة بالTemplate

و بعد أن إنتهيت قمت بعمل Implement لكل أعضاء الInterface فعلى سبيل المثال قمت بعمل Implement لل Property المسمى TemplateName ليعود بالقيمة Empty Project و قمت بإضافة ملف Resources.resx للمشروع الخاص بالموارد و قمت بإضافة أيقونة به هي Icon و قمت بعمل Implement لTemplateIcon حتى يعود بهذه الأيقونة

و الأن إلى أهم شيء و هو الحدث New في هذا المثال قمت بعمل Empty Project أي أننا لن نحتاج لإضافة أي ملفات إضافية فاكتفيت بإنشاء كائن من النوع Project و جعله يقوم بإنشاء الملف الفعلى عن طريق Save في المسار المحدد الذي تم إرساله للTemplate

ولكن في القوالب الأخرى لن يكون الأمر بهذه الصورة فعلى سبيل المثال إذا كنا سننشيء قالب يحتوي على ملف واحد وهو مثلا index.html فسنقوم بتخزين هذا الملف في الResources و عندما يتم إستدعاء الحدث New سنقوم بالتالي

إذا تم إرسال FilePath للمشروع و إختار المستخدم أن يكون C:\Projec\Web.wdp

فسنقوم بالحصول على المجلد الذي سيتم تخزين هذا الملف فيه و سيكون C:\Project

ثم نقوم بالحصول علىStream لindex.html الموجود في الResources و بعد ذلك نقوم بتخزينه فعليا في المجلد C:\Project و بالتالي سيحتوي هذا المجلد على ملف واحد حتى الأن (ملحوظة لم نقم بإنشاء ملف المشروع Web.wdp بعد)

ثم نقوم بعد ذلك بإنشاء كائن من النوع Project

و بعد ذلك نقوم بإضافة index.html كالتالي

project.MainFolder.Add(new Lib.Project.File("index.html"));
project.Save(FilePath);

و بالتالي بعد إنشاء الملف indedx.html سيتم إنشاء web.wdp و سيتم داخله وضع نص يوضح أن هناك ملف إسمه index.html داخل ملفات المشروع حتى يتم تحميله في ملفات المشروع عندما يقوم المستخدم بفتح المشروع من الملف web.wdp

تم تعديل هذه المشاركة بواسطة usama707 في 19 يناير 2006 في 15:26

#14

السلام عليكم ورحمة الله وبركاته

أخي العزيز اسامة ، يوجد فرق كبير بين أنك تكتب الموضوع ككل ، وبين أنك تقسمة بدون ورق أو أي حاجة

أنت سوف تعمل مع فريق يجب إطلاع كافة الفريق على كل الخطوات ليس تقسم وهم يعملون

يجب أن يعلموا أين هم ذاهبون ومن أين هم عائدون

يجب علم Documentation, Analyst, Design, Diagram, Template GUI

وأنا أقول هذا ليس لتعقيد الأمور ولكن لأن البرنامج كبير جدا ولا يصح فيه بدون عمل هذا

وسوف تجد مواضيع بنفس الفكرة عرض مشاريع للعمل الجماعي في هذا القسم للأخ الفاضل باشمهندس "حسام"

وسو فتجد فيه تقريبا فكرة ما أقول لك عليه

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#15

للأسف المشروع أنا إشتغلت فيه شوية لكن وقفته مؤقتا و إن شاء الله حكمله قريب و حكون وضعت نماذج UML Digrams و كل شيء قريب إن شاء الله

تم تعديل هذه المشاركة بواسطة usama707 في 1 مارس 2006 في 10:44

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…