---
title: "استبدال المصفوفة بكائن (Replace Array with Object)"
type: "refactoring-technique"
slug: "replace-array-with-object"
url: "http://localhost:3000/ar/replace-array-with-object.md"
category: "تنظيم البيانات"
description: "المشكلة: لديك مصفوفة تحتوي على أنواع مختلفة من البيانات. الحل: استبدل المصفوفة بكائن يحتوي على حقول منفصلة لكل عنصر."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# استبدال المصفوفة بكائن (Replace Array with Object)

> المشكلة: لديك مصفوفة تحتوي على أنواع مختلفة من البيانات. الحل: استبدل المصفوفة بكائن يحتوي على حقول منفصلة لكل عنصر.

## المشكلة

لديك مصفوفة تحتوي على أنواع مختلفة من البيانات.

## الحل

استبدل المصفوفة بكائن يحتوي على حقول منفصلة لكل عنصر.

## دواعي إعادة الهيكلة

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

## الفوائد

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

## كيفية إعادة الهيكلة

1. أنشئ الفئة الجديدة التي ستحتوي على بيانات المصفوفة. وضع المصفوفة نفسها في الفئة كحقل عام (Public field).
2. أنشئ حقلاً لتخزين كائن هذه الفئة في الفئة الأصلية. ولا تنسَ أيضاً إنشاء الكائن نفسه في المكان الذي قمت فيه بتهيئة مصفوفة البيانات.
3. في الفئة الجديدة، أنشئ توابع وصول واحداً تلو الآخر لكل عنصر من عناصر المصفوفة. وأعطها أسماء واضحة تشير إلى عملها. في نفس الوقت، استبدل كل استخدام لعنصر مصفوفة في الكود الرئيسي بتابع الوصول المقابل.
4. عند إنشاء توابع الوصول لجميع العناصر، اجعل المصفوفة خاصة (Private).
5. لكل عنصر في المصفوفة، أنشئ حقلاً خاصاً في الفئة ثم غيّر توابع الوصول لتستخدم هذا الحقل بدلاً من المصفوفة.
6. عند نقل جميع البيانات، احذف المصفوفة.
## Relations

**Similar techniques**

- [استبدال قيمة البيانات بكائن](/ar/replace-data-value-with-object.md)

**Eliminates smells**

- [الهوس بالأنواع الأساسية](/ar/smells/primitive-obsession.md)

## Code Examples

### java

```java
// Before
String[] row = new String[2];
row[0] = "Liverpool";
row[1] = "15";

// After
Performance row = new Performance();
row.setName("Liverpool");
row.setWins("15");
```

### csharp

```csharp
// Before
string[] row = new string[2];
row[0] = "Liverpool";
row[1] = "15";

// After
Performance row = new Performance();
row.SetName("Liverpool");
row.SetWins("15");
```

### php

```php
// Before
$row = [];
$row[0] = "Liverpool";
$row[1] = 15;

// After
$row = new Performance;
$row->setName("Liverpool");
$row->setWins(15);
```

### python

```python
// Before
row = [None * 2]
row[0] = "Liverpool"
row[1] = "15"

// After
row = Performance()
row.setName("Liverpool")
row.setWins("15")
```

### typescript

```typescript
// Before
let row = new Array(2);
row[0] = "Liverpool";
row[1] = "15";

// After
let row = new Performance();
row.setName("Liverpool");
row.setWins("15");
```

