Bu ayrıntılı bir liste değildir, ancak bir nesnenin bir yönteme argüman olarak geçip geçmemesi gerektiğine karar verirken aşağıdaki faktörlerden bazılarını göz önünde bulundurun:
Nesne değişmez mi? İşlev 'saf' mı?
Yan etkiler , kodunuzun korunmasında önemli bir husustur. Her yerde etrafta çok fazla değişken durumsal nesne geçirilen bir kod gördüğünüzde, bu kod genellikle daha az sezgiseldir (aynı şekilde, küresel hal değişkenlerinin de çoğu zaman daha az sezgisel olabileceği şekilde) ve hata ayıklama genellikle daha zor ve zaman alır; tüketen.
Genel bir kural olarak, bir metoda ilettiğiniz tüm nesnelerin açıkça değiştirilemez olmasını mümkün olduğunca makul bir şekilde sağlamayı amaçlayın.
Bir fonksiyon çağrısının sonucu olarak bir argüman durumunun değiştirilmesi beklenen herhangi bir tasarımdan kaçının (yine mümkün olduğu kadar) kaçının - bu yaklaşım için en güçlü argümanlardan biri En Az Şaşkınlık İlkesidir ; Örneğin, kodunuzu okuyan ve bir işleve geçirilen bir argüman gören biri, işlev döndükten sonra durumunun değişmesini beklemenin daha az olası olduğunu gösterir.
Yöntemin zaten kaç argümanı var?
Aşırı uzun argüman listeleri olan yöntemler (bu argümanların çoğunun 'varsayılan' değerleri olsa bile) kod kokusu gibi görünmeye başlar. Ancak bazen bu tür fonksiyonlar gerekli olabilir ve tek amacı Parametre Nesnesi gibi davranmak olan bir sınıf oluşturmayı düşünebilirsiniz .
Bu yaklaşım, 'kaynak' nesnenizden parametre nesnesine az miktarda ek eşleştirme kod eşlemesi içerebilir, ancak bu hem performans hem de karmaşıklık açısından oldukça düşük bir maliyettir, ancak ayrıştırma açısından bir takım avantajlar vardır. ve nesne değişmezliği.
İletilen nesne yalnızca uygulamanızdaki bir "katmana" mı ait (örneğin, bir ViewModel veya bir ORM Varlığı?)
Endişelerin Ayrılmasını (SoC) düşünün . Bazen, nesnenin, yönteminizin bulunduğu katman veya modüle "ait olup olmadığını" sormak (örneğin, el ile sarılmış bir API sarmalayıcı kitaplığı veya çekirdek Business Logic Layer, vb.), Bu nesnenin gerçekten kendisine geçirilmesi gerekip gerekmediğini bildirebilir. yöntem.
SoC, temiz, gevşek bağlanmış, modüler bir kod yazmak için iyi bir temeldir. örneğin, bir ORM varlık nesnesi (kodunuzla Veritabanı şemanız arasında eşleme) ideal olarak iş katmanınızda dolaşılmamalı veya sunum / kullanıcı arayüzünüzde daha kötü olmamalıdır.
'Katmanlar' arasında veri iletilmesi durumunda, bir yönteme düz veri parametrelerinin geçirilmesi genellikle bir nesnede 'yanlış' katmandan geçilmesi yerine tercih edilir. Her ne kadar muhtemelen 'doğru' katmanında yer alan ayrı modellere sahip olmanız iyi bir fikir olabilir.
Fonksiyonun kendisi çok mu büyük ve / veya karmaşık mı?
Bir işlev çok fazla veri öğesine ihtiyaç duyduğunda, bu işlevin çok fazla sorumluluk üstlenip üstlenmediğini dikkate almaya değer olabilir; daha küçük nesneler ve daha kısa, daha basit fonksiyonlar kullanarak yeniden refactor için potansiyel fırsatları araştırın.
İşlev bir komut / sorgu nesnesi mi olmalı?
Bazı durumlarda, verilerle işlev arasındaki ilişki yakın olabilir; Bu durumlarda, bir Komut Nesnesi veya bir Sorgu Nesnesi'nin uygun olup olmadığını göz önünde bulundurun .
Bir yönteme bir nesne parametresi eklemek, içeren sınıfı yeni bağımlılıkları benimsemeye zorlar mı?
Bazen "Eski verileri düzleştir" argümanları için en güçlü argüman, alıcı sınıfın zaten tamamen kendi kendine yeten olmasıdır ve yöntemlerinden birine bir nesne parametresi eklemek, sınıfı kirletir (veya sınıf zaten kirliyse, o zaman var olan entropiyi daha da kötüleştirir)
Gerçekten tam bir nesneyi mi geçmeniz gerekiyor yoksa o nesnenin arabiriminin sadece küçük bir bölümüne mi ihtiyacınız var?
İşlevlerinize ilişkin Arabirim Ayrıştırma Prensibi'ni göz önünde bulundurun - yani bir nesneye geçerken, yalnızca bu argümanın arayüzünün gerçekte ihtiyaç duyduğu kısımlarına bağlı olmalıdır.