هذا السلوك في الواقع منطقي تمامًا ليس فقط من وجهة نظر الأداء. فكر في الأمر بهذه الطريقة:
عندما تستخدم observe
الطريقة ، تريد أن يتم إخطار جميع التغييرات التي تحدث ل مجموعة (سواء على الخادم أو في الحد الأدنى). لذا فإن كل من عمليات الاسترجاعات التي تتلقاها هي مثيل واحد لتعديل مجموعة. عندما تقوم بتغيير ترتيب الكائنات عن طريق نقل أحدها إلى مكان آخر ، يمكنك تغيير المجموعة ذات مرة، لذلك تريد الحصول على رد اتصال واحد فقط لهذا الحدث.
لا تريد أن يتم إخطارها 42 مرة عن حدث واحد!
أعتقد أن أسهل طريقة لضرب هذا الإخطار لجميع الكائنات التي تم نقلها هي حلقةها يدويًا داخل رد الاتصال. عندما ينتقل عنصر من الموضع A إلى الموضع B ، فأنت تعلم أن جميع الكائنات التي كانت بين A و B قد تم أيضًا تغييرها. لذلك إذا كنت بحاجة إلى ضبط كل منهم ، فما عليك سوى القيام بذلك في حلقة تنتقل من A إلى B على القائمة بأكملها.