---
title: "الحفاظ على الكائن كاملاً (Preserve Whole Object)"
type: "refactoring-technique"
slug: "preserve-whole-object"
url: "http://localhost:3000/ar/preserve-whole-object.md"
category: "تبسيط استدعاءات الدوال"
description: "المشكلة: تحصل على قيم متعددة من كائن ثم تمررها كمعاملات إلى تابع. الحل: بدلاً من ذلك، جرب تمرير الكائن بأكمله."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# الحفاظ على الكائن كاملاً (Preserve Whole Object)

> المشكلة: تحصل على قيم متعددة من كائن ثم تمررها كمعاملات إلى تابع. الحل: بدلاً من ذلك، جرب تمرير الكائن بأكمله.

## المشكلة

تحصل على قيم متعددة من كائن ثم تمررها كمعاملات إلى تابع.

## الحل

بدلاً من ذلك، جرب تمرير الكائن بأكمله.

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

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

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

## الفوائد

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

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

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

**Similar techniques**

- [إدخال كائن المعاملات (Introduce Parameter Object)](/ar/introduce-parameter-object.md)
- [استبدال المعامل باستدعاء دالة](/ar/replace-parameter-with-method-call.md)

**Eliminates smells**

- [الهوس بالأنواع الأساسية](/ar/smells/primitive-obsession.md)
- [قائمة المعاملات الطويلة](/ar/smells/long-parameter-list.md)
- [الدالة الطويلة](/ar/smells/long-method.md)
- [تجمعات البيانات](/ar/smells/data-clumps.md)

## Code Examples

### java

```java
// Before
int low = daysTempRange.getLow();
int high = daysTempRange.getHigh();
boolean withinPlan = plan.withinRange(low, high);

// After
boolean withinPlan = plan.withinRange(daysTempRange);
```

### csharp

```csharp
// Before
int low = daysTempRange.GetLow();
int high = daysTempRange.GetHigh();
bool withinPlan = plan.WithinRange(low, high);

// After
bool withinPlan = plan.WithinRange(daysTempRange);
```

### php

```php
// Before
$low = $daysTempRange->getLow();
$high = $daysTempRange->getHigh();
$withinPlan = $plan->withinRange($low, $high);

// After
$withinPlan = $plan->withinRange($daysTempRange);
```

### python

```python
// Before
low = daysTempRange.getLow()
high = daysTempRange.getHigh()
withinPlan = plan.withinRange(low, high)

// After
withinPlan = plan.withinRange(daysTempRange)
```

### typescript

```typescript
// Before
let low = daysTempRange.getLow();
let high = daysTempRange.getHigh();
let withinPlan = plan.withinRange(low, high);

// After
let withinPlan = plan.withinRange(daysTempRange);
```

