Bu bağlamda "Dış", "kullanıcılara gözlemlenebilir" anlamına gelir. Kullanıcılar bir uygulama durumunda insan olabilir veya genel bir API durumunda başka programlar olabilir.
Bu nedenle, M yöntemini A sınıfından B sınıfına taşırsanız ve her iki sınıf da bir uygulamanın derinindeyse ve uygulamanın davranışındaki herhangi bir değişikliği, değişiklik nedeniyle gözlemleyemezseniz, o zaman doğrulamayı refactoring olarak adlandırabilirsiniz.
OTOH ise, bazı daha üst düzey bir alt sistem / bileşen, davranışını değiştirir veya değişiklik nedeniyle kırılır, bu gerçekten de (genellikle) kullanıcılar (veya en azından günlükleri kontrol eden sysadmins kontrolleri) görülebilir. Veya sınıflarınız ortak bir API’nin parçasıysa, B’nin değil, A sınıfının bir parçası olmasına bağlı olan 3. parti kod olabilir. Bu nedenle, bu davaların hiçbiri katı anlamda yeniden yönlenmiyor.
Herhangi bir kod çalışmasını yeniden yapılandırma olarak adlandırma eğilimi var, sanırım yanlış.
Gerçekten de, yeniden yapılanmanın modaya kavuşması üzücü ancak beklenen bir sonucudur. Geliştiriciler, uzun süredir geçici olarak kod çalışması yapıyorlar ve yeni bir bilmeceyi öğrenmek, köklü alışkanlıkları analiz etmek ve değiştirmek yerine kesinlikle daha kolay.
Öyleyse dış davranışları değiştiren reworks'ler için doğru kelime nedir?
Ben buna yeniden dizayn derim .
Güncelleştirme
Arayüzle ilgili ilginç cevapların birçoğu var ancak harekete geçmeyen metodun arayüzü değiştirmesine neden olmaz mı?
Neyin? Belirli sınıflar, evet. Fakat bu sınıflar herhangi bir şekilde doğrudan dış dünyaya görünür durumda mı? Onlar dış arabirimi (API / GUI) bölümü program içerisine, ve çünkü - Değilse programı - değişiklik yapılmış dış taraflarca gözlenebilir yoktur (elbette değişim sonları şey, sürece).
Bunun ötesinde daha derin bir soru olduğunu hissediyorum: belirli bir sınıf kendi başına bağımsız bir varlık olarak var mı? Çoğu durumda, cevap hayırdır : sınıf sadece daha büyük bir bileşenin parçası, sınıflar ve nesnelerden oluşan bir ekosistemdir, bunlar olmadan başlatılamaz ve / veya kullanılamaz. Bu ekosistem sadece (dolaylı / dolaylı) bağımlılıklarını değil, aynı zamanda ona bağlı diğer sınıfları / nesneleri de içerir. Bunun nedeni, bu yüksek seviyeli sınıflar olmadan, sınıfımızla ilişkili sorumluluğun sistem kullanıcıları için anlamsız / yararsız olabileceğidir.
Örneğin, araç kiralama ile uğraşan projemizde Charge
sınıf. Bu sınıf, sistemin kullanıcılarını kendi başına kullanmaz, çünkü kiralık istasyon acenteleri ve müşteriler bireysel bir ücretlendirme ile fazla bir şey yapamazlar: bir bütün olarak kira sözleşmesi sözleşmeleri ile uğraşırlar (bir sürü farklı ücret içerir) . Kullanıcılar çoğunlukla, sonunda ödemeleri gereken bu ücretlerin toplamına; Temsilci seçilen farklı sözleşme seçenekleriyle, kiralama süresinin, araç grubunun, sigorta paketinin, ekstra kalemlerin vb. ile ilgilenir, bunlar (karmaşık iş kuralları aracılığıyla) hangi ücretlerin mevcut olduğunu ve kesin ödemenin nasıl hesaplandığını yönetir. bunlar disinda. Ülke temsilcileri / iş analistleri, belirli iş kurallarına, sinerji ve etkilerine (şirketin gelirine vb.) Dikkat eder.
Son zamanlarda, bu sınıfı yeniden etkiledim, alanlarının ve yöntemlerinin çoğunu yeniden adlandırdım (öncekiler tarafından tamamen ihmal edilen standart Java adlandırma kurallarına uymak için). Ayrıca daha uygun ve tipe sahip alanları String
ve char
alanları değiştirmek için başka refactoringler planlıyorum . Bütün bunlar kesinlikle sınıfın arayüzünü değiştirecek, ancak (eğer işimi doğru yaparsam) hiçbiri uygulamamızın kullanıcıları tarafından görülmeyecek. Hiçbiri, bireysel olarak ücretlendirmenin nasıl temsil edildiğini umursamıyor, kesinlikle ücret kavramını bilmelerine rağmenenum
boolean
. Herhangi bir alan kavramını temsil etmeyen yüzlerce sınıf daha seçebilirdim, bu yüzden son kullanıcılar için kavramsal olarak görünmez bile, ancak kavram düzeyinde en azından bir görünürlüğün olduğu bir örnek seçmenin daha ilginç olduğunu düşündüm. Bu, güzel bir şekilde sınıf arayüzlerinin gerçek etkiyi değil, yalnızca etki alanı kavramlarının (en iyi ihtimalle) temsilleri olduğunu gösterir. Temsil kavramı etkilenmeden değiştirilebilir. Ve kullanıcılar sadece kavramı var ve anlıyorlar; kavram ve temsil arasındaki eşlemeyi yapmak bizim görevimizdir.
* Ve kolayca sınıfımızın temsil ettiği alan modelinin kendisi sadece bazı "gerçek şeylerin" sadece bir temsili olduğunu ekleyebilir ...