خاصة مقابلالأعضاء العامة في الممارسة (ما مدى أهمية التغليف?) [مغلقة]

StackOverflow https://stackoverflow.com/questions/99688

  •  01-07-2019
  •  | 
  •  

سؤال

واحدة من أكبر مزايا البرمجة وجوه المنحى هو التغليف ، واحدة من "الحقائق" لقد (أو على الأقل أنا) تم تدريسها هو أن الأعضاء يجب أن تكون دائما خاصة وإتاحتها عبر أسلوب استرجاع القيمة و mutator الطرق ، وبالتالي ضمان القدرة على التحقق من صحة التغييرات.

أنا الغريب, على الرغم من مدى أهمية هذا هو حقا في الممارسة العملية.ولا سيما إذا كان لديك أكثر تعقيدا الأعضاء (مثل مجموعة) ، فإنه يمكن أن يكون مغريا جدا فقط تجعل من الجمهور بدلا من إجراء مجموعة من الأساليب للحصول على مجموعة مفاتيح ، إضافة/إزالة العناصر من مجموعة ، إلخ.

هل تتبع القاعدة بشكل عام ؟ لا إجابة تتغير اعتمادا على ما إذا كان رمز مكتوب على نفسك مقابلليتم استخدامها من قبل الآخرين ؟ هناك أكثر دهاء الأسباب أنا في عداد المفقودين على هذا التشويش?

هل كانت مفيدة؟

المحلول

ذلك يعتمد.هذا هو واحد من تلك القضايا التي يجب أن قررت عمليا.

لنفترض أن لدي فئة تمثل نقطة.أنا يمكن أن يكون حاصل على واضعي ل X و Y إحداثيات ، أو فقط يمكن أن تجعل لهم على حد سواء العامة والسماح بحرية القراءة/الكتابة الوصول إلى البيانات.في رأيي هذا هو موافق لأن الفئة يتصرف وكأنه سبحانه البنية - جمع البيانات مع ربما بعض الوظائف المفيدة المرفقة.

ومع ذلك ، هناك الكثير من الظروف التي كنت لا تريد أن توفر الوصول الكامل إلى البيانات الداخلية والاعتماد على الأساليب التي تقدمها الطبقة للتفاعل مع الكائن.على سبيل المثال سيكون طلب HTTP والاستجابة.في هذه الحالة انها فكرة سيئة أن تسمح لأي شخص أن يرسل أي شيء عبر السلك - يجب أن تكون معالجتها مهيأ من قبل الطبقة الأساليب.في هذه الحالة, الصف تصور باعتبارها الكائن الفعلي و ليس مجرد مخزن البيانات.

يتعلق الأمر في الواقع إلى ما إذا كان أو لم الأفعال (طرق) محرك هيكل أو إذا كانت البيانات لا.

نصائح أخرى

كما شخص ما الحاجة إلى الحفاظ على عدة كود البالغ من العمر عملت على كثير من الناس في الماضي ، كان واضحا لي أنه إذا كان عضو سمة عامة ، هو في نهاية المطاف يساء استخدامها.حتى أنني سمعت الناس يختلفون مع فكرة accessors و mutators ، كما أن هذا لا يزال لا يعيش حقا ما يصل إلى الغرض من التغليف ، الذي هو "إخفاء الأعمال الداخلية من فئة".من الواضح انه موضوع مثير للجدل لكن رأيي أن يكون "جعل كل عضو متغير خاص, أعتقد في المقام الأول حول ما فئة يجب أن هل (طرق) بدلا من كيف أنت ذاهب إلى ترك الناس تغيير المتغيرات الداخلية".

نعم, تغليف المسائل.وفضح تنفيذ الكامنة لا (على الأقل) مشكلتين:

  1. يخلط المسؤوليات.المتصلين لا تحتاج أو تريد أن تفهم تنفيذ الأساسية.أرادوا فقط فئة للقيام بعملها.من خلال تعريض تنفيذ الأساسية ، أنت فئة لا تقوم بعملها.بدلا من ذلك, انها مجرد دفع المسؤولية على المتصل.
  2. العلاقات الأساسية التنفيذ.بمجرد فضح تنفيذ الأساسية ، كنت مرتبطة ذلك.إذا كنت تقول المتصلين ، على سبيل المثال ، هناك مجموعة تحت, لا يمكنك بسهولة مبادلة مجموعة جديدة التنفيذ.

هذه (وغيرها) مشاكل تطبيق بغض النظر عما إذا كنت تعطي إمكانية الوصول المباشر إلى تنفيذ الأساسية أو مجرد تكرار كل الكامنة الأساليب.يجب أن يكون تعريض التنفيذ اللازمة, و لا شيء أكثر.حفظ تنفيذ خاص يجعل النظام العام أكثر للصيانة.

أنا أفضل للحفاظ على أعضاء خاصة لأطول فترة ممكنة فقط الوصول لهم عن طريق حاصل ، حتى من داخل نفس الطبقة.أنا أيضا في محاولة لتجنب واضعي باعتباره أول مشروع لتعزيز القيمة نمط الكائنات طالما كان ذلك ممكنا.العمل مع الاعتماد على حقن الكثير لديك كثير من الأحيان واضعي ولكن لا حاصل ، كما يجب أن يكون العميل قادرا على تكوين كائن ولكن (الآخرين) لا تعرف ما acutally تكوين هذا هو تنفيذ التفاصيل.

التحيات ، اولي

أنا أميل إلى اتباع القاعدة جميلة بدقة ، حتى عندما انها مجرد بلدي رمز.أنا حقا مثل خصائص في C# لهذا السبب.فإنه يجعل من السهل حقا أن السيطرة على ما القيم وهب, ولكن لا يزال بإمكانك استخدامها المتغيرات.أو جعل مجموعة خاصة على العامة ، الخ.

أساسا إخفاء المعلومات حول رمز الوضوح.انها مصممة لجعل من السهل على شخص آخر لتمديد قانون ، ومنعهم من غير قصد خلق الخلل عند العمل مع البيانات الداخلية من الفصول الدراسية.أنها تقوم على مبدأ أن لا أحد يقرأ تعليقات, خصوصا تلك التعليمات في نفوسهم.

على سبيل المثال: أنا أكتب رمز التحديثات متغير و أريد أن أتأكد من أن التغييرات واجهة المستخدم الرسومية لتعكس التغيير, أسهل طريقة لإضافة accessor طريقة (الملقب "واضع") ، وهو ما يسمى بدلا من تحديث البيانات يتم تحديثها.

إذا قمت بعمل تلك البيانات العامة و يتغير شيء متغير دون الذهاب من خلال اضع طريقة (و هذا يحدث في كل أقسم كلمة الوقت) ، ثم شخص سوف تحتاج إلى قضاء ساعة التصحيح لمعرفة لماذا التحديثات لا يتم عرضها.وينطبق الشيء نفسه ، وبدرجة أقل ، إلى "الحصول على البيانات".أنا قد وضعت التعليق في ملف الرأس ، ولكن الاحتمالات هي أن لا أحد سوف يقرأها حتى سارت الامور بشكل خاطئ.فرض مع القطاع الخاص يعني خطأ لا يمكن ، لأنه سوف تظهر باعتبارها تقع بسهولة ترجمة في الوقت الخطأ, بدلا من تشغيل في الوقت الخطأ.

من تجربة الوحيد مرات كنت تريد أن تجعل عضو متغير العامة ، وترك جالبة أساليب اضع إذا كنت تريد أن تجعل من الواضح تماما أن تغيير سيكون لها أي آثار جانبية.خصوصا إذا كانت البيانات بنية بسيطة ، مثل فئة ببساطة يحمل اثنين من المتغيرات كزوج.

هذا ينبغي أن يكون إلى حد ما نادرة التكرار ، كما عادة كنت تريد الآثار الجانبية, و إذا كانت البيانات هيكل أنت خلق بسيط بحيث لا (هـ.ز الاقتران) ، سوف يكون هناك بالفعل أكثر كفاءة كتبت واحدة متاحة في مكتبة القياسية.

وقال مع ذلك, معظم البرامج الصغيرة التي تستخدم لمرة واحدة لا تمديد ، مثل تلك التي تحصل في الجامعة ، إنها أكثر "الممارسات الجيدة" من أي شيء, لأن عليك أن تتذكر خلال الكتابة عليها, ومن ثم عليك أن تسلمهم و لم المس الرمز مرة أخرى.أيضا, إذا كنت تكتب بنية البيانات كوسيلة معرفة عن كيفية تخزين البيانات بدلا من إصدار قانون ، ثم هناك حجة حاصل على واضعي لن يساعد في الحصول على الطريق من تجربة التعلم.

فقط عند الوصول إلى مكان العمل أو مشروع كبير ، حيث احتمال أن التعليمات البرمجية الخاصة بك وسوف يطلق على الأجسام والهياكل مكتوبة من قبل أشخاص مختلفين ، أن يصبح حيويا في جعل هذه "تذكير" قوية.ما إذا كان أو لم يكن رجل واحد المشروع من المستغرب ذي صلة ، لسبب بسيط هو أن "ستة أسابيع من الآن" مختلفة الشخص زميل في العمل.و "لي ستة أسابيع" غالبا ما تتحول إلى أن تكون كسول.

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

C# خصائص 'محاكاة' الميادين العامة.يبدو باردا جدا و جملة حقا يسرع خلق هذه طرق الحصول على/مجموعة

نضع في اعتبارنا دلالات استدعاء أساليب على كائن.طريقة الاحتجاج هو على مستوى عال جدا التجريد التي يمكن تنفيذها بلدي المترجم أو تشغيل نظام الوقت في مجموعة متنوعة من الطرق المختلفة.

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

من خلال الترميز إلى واجهات يمكنك كتابة التعليمات البرمجية التي لا يهتم فيها الهدف كائن موجود أو كيف هي طرق الاحتجاج أو حتى لو كان مكتوب في نفس اللغة.


في المثال الخاص بك كائن أن تنفذ كل أساليب جمع ، فمن المؤكد أنه كائن في الواقع هو مجموعة.لذلك ربما سيكون هذا هو حال الميراث سيكون أفضل من التغليف.

انها كل شيء عن السيطرة على ما يمكن أن يفعله الناس مع ما كنت تعطي لهم.والمزيد من السيطرة على أكثر من الافتراضات التي يمكن أن تجعل.

أيضا ، theorectically يمكنك تغيير تنفيذ الكامنة أو ما شابه ، لكن منذ الجزء الأكبر هو:

private Foo foo;
public Foo getFoo() {}
public void setFoo(Foo foo) {}

انها قليلا من الصعب تبرير.

التغليف المهم عند واحد على الأقل من هذه يحمل:

  1. أي شخص ولكن كنت ذاهب الى استخدام الفئة الخاصة بك (أو أنها سوف كسر الثوابت لأنهم لا قراءة الوثائق).
  2. أي شخص لا قراءة الوثائق هو ذاهب الى استخدام الفئة الخاصة بك (أو أنها سوف كسر الخاص بك بعناية موثقة الثوابت).علما أن هذه الفئة تشمل أنت عامين من الآن.
  3. في بعض نقطة في المستقبل شخص ما سوف ترث من فئة (لأنه ربما إضافية لا بد من اتخاذ الإجراءات عندما تكون قيمة الحقل التغييرات ، لذلك يجب أن يكون هناك واضع).

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

اتجاه بلدي هو محاولة لجعل كل شيء خاصة إذا كان ذلك ممكنا.هذا يحافظ الكائن الحدود بوضوح ممكن يبقي الأشياء كما تنفصل ممكن.أنا أحب هذا لأنه عندما أريد كتابة كائن أنني فاشلة أول (الثاني, الخامس؟) الوقت يبقى الضرر الوارد على عدد أصغر من الكائنات.

إذا كنت زوجين الكائنات بإحكام بما فيه الكفاية ، قد يكون أكثر وضوحا فقط إلى الجمع بينهما في كائن واحد.إذا كنت الاسترخاء اقتران القيود يكفي أنك عدت إلى البرمجة المهيكلة.

قد يكون من أن إذا كنت تجد أن مجموعة من الأشياء الخاصة بك هي مجرد أسلوب استرجاع القيمة الوظائف ، يجب إعادة النظر في وجوه الشعب.إذا كنت لا تفعل أي إجراءات على أن البيانات قد تنتمي كجزء من كائن آخر.

بالطبع, إذا كنت تريد كتابة شيء مثل المكتبة تريد واضحة وحادة من واجهة ممكن حتى يمكن للآخرين برنامج ضدها.

تناسب أداة العمل...مؤخرا رأيت بعض التعليمات البرمجية مثل هذا في بلدي الحالي تعليمات البرمجة الأساسية:

private static class SomeSmallDataStructure {
    public int someField;
    public String someOtherField;
}

ثم هذه الطبقة كانت تستخدم داخليا بسهولة تمرير بيانات متعددة القيم.هذا لا معنى له, ولكن إذا كان لديك البيانات فقط ، مع عدم وجود الطرق ، ولم تكن تعريضها العملاء, أجد أنه من المفيد جدا نمط.

أحدث استخدام كان من كان هذا صفحة JSP حيث كان جدول البيانات التي يتم عرضها, المحددة في الجزء العلوي بشكل إلزامي.لذا في البداية كان في صفائف متعددة, صفيف واحد لكل حقل بيانات...هذا المنتهية في قانون يجري بدلا من الصعب الخوض مع الحقول لا يجري بجانب بعضنا البعض في التعريف التي سيتم عرضها معا...لذلك أنا خلقت فئة بسيطة مثل أعلاه والتي من شأنها أن تسحبه معا...وكانت النتيجة حقا رمز للقراءة ، الكثير أكثر من ذلك من قبل.

الأخلاقية...في بعض الأحيان يجب عليك أن تنظر "مقبولة سيئة" بدائل إذا كانوا قد جعل رمز أبسط و أسهل في القراءة ، طالما كنت تعتقد أنه من خلال النظر في العواقب...لا عمياء قبول كل ما تسمع.

إلى أن قال...العامة حاصل على واضعي هو الى حد كبير ما يعادل العامة الحقول...على الأقل في الأساس (هناك صبي أكثر مرونة ، لكنها لا تزال سيئة نمط لتطبيق كل ميدان لديك).

حتى جافا المكتبات القياسية لديها بعض الحالات من المجالات العامة.

عندما كنت جعل الكائنات ذات مغزى هم أسهل إلى استخدام وأسهل الحفاظ على.

على سبيل المثال:الشخص.اليد.الاستيلاء على(howquick, كم سعر);

خدعة لا أعتقد من أعضاء بسيطة القيم ولكن الأشياء في حد ذاتها.

أنا أزعم أن هذا السؤال لا خلط مفهوم التغليف مع 'إخفاء المعلومات'
(هذه ليست الناقد, لأنه لا يبدو أن مباراة مشترك تفسير مفهوم 'التغليف')

ومع ذلك بالنسبة لي ، 'التغليف' هو إما:

  • عملية تجميع عدة عناصر في وعاء
  • الحاوية نفسها تجميع العناصر

افترض أنك تقوم بتصميم دافع الضرائب النظام.لكل دافعي الضرائب ، يمكن أن تغليف مفهوم الطفل في

  • قائمة الأطفال يمثل الأطفال
  • خريطة من أن يأخذ بعين الاعتبار الأطفال من الآباء مختلفة
  • كائن الأطفال (ليس الأطفال) التي من شأنها أن توفر المعلومات اللازمة (مثل مجموع عدد الأطفال)

هنا لديك ثلاثة أنواع مختلفة من التلخيصات, 2 يمثله على مستوى منخفض حاوية (القائمة أو الخريطة), واحد يمثله كائن.

قبل اتخاذ تلك القرارات ، لا

  • جعل هذا التغليف العامة أو حماية أو الخاصة:أن اختيار 'إخفاء المعلومات' لا يزال يتعين بذل
  • جعل التجريد (تحتاج إلى صقل سمات وجوه الأطفال و قد تقرر إنشاء كائن الطفل ، التي من شأنها أن تبقي فقط على المعلومات ذات الصلة من وجهة نظر دافع الضرائب النظام)
    التجريد هو عملية اختيار السمات التي من وجوه هي ذات الصلة إلى النظام الخاص بك, والتي يجب تجاهلها تماما.

لذلك وجهة نظري هو:
هذا السؤال قد كانت بعنوان:
خاصة مقابلالعامة أعضاء في الممارسة العملية (كيف المهم إخفاء المعلومات?)

فقط 2 سنت ، على الرغم من.أنا تماما الصدد أن أحد قد تنظر في تغليف عملية بما في ذلك 'إخفاء المعلومات' القرار.

ومع ذلك, أحاول دائما أن نفرق 'التجريد' - 'التغليف' - 'إخفاء المعلومات أو الرؤية'.

@VonC

قد تجد المنظمة الدولية للتوحيد القياسي "، مرجع نموذج فتح المعالجة الموزعة ، " قراءة مثيرة للاهتمام.ويعرف:"التغليف:مكان الإقامة أن المعلومات الواردة في كائن يمكن الوصول إليها إلا من خلال التفاعلات في واجهات بدعم من الكائن."

حاولت جعل قضية إخفاء المعلومات يجري جزء هام من هذا التعريف هنا:http://www.edmundkirwan.com/encap/s2.html

التحيات ،

إد.

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

بعد كل حاصل على واضعي يساوي الحقل العامة (عندما حاصل على واضعي هي تافهة/تتولد تلقائيا).في بعض الأحيان قد يكون من الأفضل فقط أن تعلن الميادين العامة ، حيث أن القانون سوف تكون أكثر بساطة ، إلا إذا كنت بحاجة تعدد الأشكال أو إطار يتطلب طرق الحصول على/مجموعة (لا يمكنك تغيير الإطار).

ولكن هناك أيضا حالات حيث وجود حاصل على واضعي هو نمط جيد.مثال واحد:

عند إنشاء واجهة المستخدم الرسومية تطبيق, أحاول الحفاظ على سلوك المستخدم الرسومية في فئة واحدة (FooModel) بحيث يمكن أن تكون وحدة اختبار بسهولة ، التصور واجهة المستخدم الرسومية في فئة أخرى (FooView) التي يمكن اختبارها إلا يدويا.عرض نموذج انضم مع بسيطة الغراء المدونة ؛ عندما يقوم المستخدم بتغيير قيمة الحقل x, ، عرض المكالمات setX(String) على النموذج ، والذي بدوره قد يرفع الحدث أن بعض جزء آخر من نموذج قد تغير ، و عرض سوف تحصل على تحديث القيم من نموذج مع حاصل.

في مشروع واحد ، هناك واجهة المستخدم الرسومية النموذج الذي يحتوي على 15 حاصل على واضعي فقط 3 الحصول على طرق تافهة (مثل IDE يمكن أن تولد لهم).كل الآخرين تحتوي على بعض الوظائف أو غير تافهة تعبيرات مثل التالية:

public boolean isEmployeeStatusEnabled() {
    return pinCodeValidation.equals(PinCodeValidation.VALID);
}

public EmployeeStatus getEmployeeStatus() {
    Employee employee;
    if (isEmployeeStatusEnabled()
            && (employee = getSelectedEmployee()) != null) {
        return employee.getStatus();
    }
    return null;
}

public void setEmployeeStatus(EmployeeStatus status) {
    getSelectedEmployee().changeStatusTo(status, getPinCode());
    fireComponentStateChanged();
}

في الواقع أنا دائما تتبع قاعدة واحدة فقط ، "لا يوجد مقاس واحد يناسب الجميع" القاعدة.

التغليف لها أهمية هو نتاج المشروع الخاص بك.ما الكائن سوف يكون الوصول إلى واجهة الخاص بك ، وكيف سيتم استخدامه ، لن يهم إذا كان لديهم غير الضرورية حقوق الوصول إلى الأعضاء ؟ تلك الأسئلة ويحب منهم عليك أن تسأل نفسك عند العمل على كل مشروع تنفيذ.

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

لكن الكائنات التي الخادم وحدة واجهة مع رمز المستخدم ، ثم التمسك الصارم الخصوصية أنماط.

بالتأكيد هناك فرقا سواء كتاباتك الداخلية رمز أو رمز ليتم استخدامها من قبل شخص آخر (أو حتى من نفسك, ولكن كما المتضمنة بالوحدة.) أي رمز هو على وشك أن يستخدم خارجيا ينبغي أن يكون تعريف/توثيق واجهة التي سوف تحتاج إلى تغيير أقل قدر ممكن.

الداخلية الرمز ، اعتمادا على صعوبة ، قد تجد أنها أقل عمل أشياء طريقة بسيطة الآن ، ودفع القليل من العقوبة في وقت لاحق.بالطبع قانون مورفي سوف تضمن أن على المدى القصير اكتساب سوف تمحى عدة مرات في الحاجة إلى إجراء تغييرات واسعة النطاق في وقت لاحق حيث كنت في حاجة إلى تغيير فئة' الداخلية التي فشلت في تغليف.

على وجه التحديد أن المثال الخاص بك باستخدام مجموعة أنك ستعود ، يبدو أنه من الممكن أن تنفيذ مثل هذه المجموعة قد تغير (على عكس أبسط الأعضاء المتغيرات) مما يجعل فائدة التغليف أعلى.

أن يقال, أنا كيندا مثل بايثون طريقة التعامل معها.الأعضاء المتغيرات العامة بشكل افتراضي.إذا كنت ترغب في إخفائها أو إضافة التحقق من صحة هناك تقنيات المقدمة ، ولكن هذه تعتبر حالات خاصة.

لا تتبع القواعد على هذا طوال الوقت تقريبا.هناك أربعة سيناريوهات بالنسبة لي - في الأساس ، فإن القاعدة نفسها عدة استثناءات (كل Java-تأثر):

  1. يمكن استخدامها من قبل أي شيء خارج الفصل الحالي ، الوصول إليها عن طريق حاصل/واضعي
  2. الداخلية-إلى الدرجة الاستخدام عادة يسبقه 'هذا' أن نوضح أنه ليس أسلوب المعلمة
  3. شيء يعني البقاء صغيرة للغاية ، مثل النقل الكائن في الأساس من تسديدة مباشرة من الصفات ؛ كل العام
  4. بحاجة إلى أن تكون غير خاصة على امتداد من نوع ما

هناك اهتمام عملي هنا أن لا يتناولها معظم القائمة إجابات.التغليف و التعرض نظيفة وآمنة واجهات خارج الرمز هو دائما كبيرة, لكنه أكثر أهمية عندما مدونة كنت تكتب يهدف إلى أن تستهلك من قبل مكانيا أو زمنيا كبيرة "المستخدم" القاعدة.ما أعنيه هو أنه إذا كنت تخطط على شخص (حتى أنت) الحفاظ على القانون في المستقبل ، أو إذا كنت تريد كتابة وحدة التي سوف تتفاعل مع رمز من أكثر من حفنة من مطورين آخرين ، تحتاج إلى التفكير أكثر من ذلك بكثير بعناية مما إذا كنت كتابة التعليمات البرمجية التي إما لمرة واحدة أو كليا كتبها لك.

بصراحة أنا أعرف ما البائسة هندسة البرمجيات ممارسة هذا, ولكن أنا في كثير من الأحيان تجعل كل شيء في الأولى ، الأمر الذي يجعل الأمور هامشية أسرع إلى تذكر نوع ، ثم يضاف التغليف كما أنه من المنطقي.إعادة بيع ديون الأدوات الأكثر شعبية ايديس في هذه الأيام يجعل النهج الذي تستخدمه (إضافة التغليف مقابلأخذه) أقل أهمية مما كانت عليه من قبل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top