İlk olarak, Edsger W. Dijkstra'nın 1974 tarihli "Bilimsel düşüncenin rolü hakkında" bir alıntı okudum:
Size açıklamaya çalışayım, zevkimin ne olduğu tüm zeki düşünme için karakteristiktir. Kişi her zaman kişinin sadece bir yönüyle meşgul olduğunu bilerek, kendi tutarlılığının uğruna tek başına bir konunun bir yönünü derinlemesine incelemeye isteklidir. Bir programın doğru olması gerektiğini biliyoruz ve programı yalnızca bu bakış açısından inceleyebiliriz; bunun da verimli olması gerektiğini biliyoruz ve tabiri caizse verimliliğini başka bir günde inceleyebiliriz. Başka bir ruh halinde kendimize, programın istenip istenmediğini ve neden olup olmadığını sorabiliriz. Ancak, bu çeşitli yönleri aynı anda ele alarak hiçbir şey - tam tersine! Bazen "endişelerin ayrılması" dediğim şeydir, ki bu mükemmel bir şekilde mümkün olmasa bile, bildiğim kişinin düşüncelerini etkili bir şekilde sıralamak için mevcut tek teknik. "Birinin dikkatini bir veçhesine odaklamak" ile kastettiğim budur: bu, diğer veçheleri görmezden gelmek anlamına gelmez, sadece bu veçhenin bakış açısından diğerinin alakasız olduğu gerçeğine adalet yapmaktır. Aynı anda tek ve çok kanallı düşünülmektedir.
Endişelerin modern bir şekilde ayrılmasının kodunuzu modülerleştirmek hakkında konuştuğunu görüyorum. Bununla birlikte, yukarıdaki alıntıyı okurken, bunu zihninizi bir anda belirli bir göreve odaklarken, diğer yönlere odaklanma olarak anlıyorum. Bu benim için kodun modüler parçalara ayrılması gerektiği anlamına gelmez.
Yani, önünüzde bir dosyada tek bir dosyada görünüm, depo, denetleyici, olay işleme, fabrika vb.
Kısa bir örnek için, veri erişimi ve görünümü (çıktı) olan bazı kodlar aşağıdadır:
$sql = "SELECT * FROM product WHERE id = " . db_input($id);
$row = db_fetch_array(db_query($sql));
<option value="<?=$row['id']?>"<?= $row['ver'] == $row['ver'] ? ' selected="selected"' : '' ?>>Version <?=$row['ver']?></option>
Modern OO'yu kullanarak Havuz desenini kullanarak veri erişimine kendi dosyasına yerleştirebilirim, Görünüm kodu kendi dosya şablonuna girebilir ve bunları bir denetleyici (veya Eylem veya İstek İşleyici) aracılığıyla iletişim kurmak için birbirine bağlayabilirim ve çeşitli bağımlılıklar oluşturmak ve bağlamak için bir fabrika ekleyin. Ve bu fabrikaları tanımlayan bir konfigürasyon dosyasına sahip olabilirim. Elbette tek dosyadan her şeyden bir adım uzaktadır.
Endişelerin ayrılması ile ilgili sorum şu şekildedir: Dijkstra'nın sözünü okurken, belki de endişelerin "kodun modüler olarak ayrılması (dosyalara veya kendi işlevlerine / yöntemlerine / vb.)" Olması gerektiği anlamına gelmediğini, ve fiziksel olarak kod içinde ayrılıp ayrılmadığına bakılmaksızın, kendinizi başka önemli ve şu anda dikkate alınamayan diğer yönlere odaklanmaksızın, zihnini programın bir yönüne odaklamak anlamına geliyordu.
O zaman neden kendimizi fiziksel modüler kod ayırma ve tasarım kalıpları ile yüklüyoruz? Kodunuzun nasıl yapılandırıldığından bağımsız olarak, yalnızca bir yönüne odaklanmak yeterli olmayacak mı?
En korkunç spagetti kodunu yazmaktan bahsetmiyorum ve sonra sadece bir yönünü göz önünde bulundurarak, bu muhtemelen bir yük olacaktır. Ama nihayetinde, gidiyorum, neden fiziksel kod ayırma gerçekleştirin, neden zihinsel olarak bir yönüne odaklanmak için gerekli olmadığında, kodu ayrı dosyalara veya parçalara (yöntemlere) ayırın?
Endişelerin ayrılması fiziksel değil zihinsel bir egzersiz olarak mı kalmalı?
Başka bir deyişle, programlamanın zihinsel (odaklanma) ve fiziksel (kağıt üzerindeki kod) yönleri arasında bir bağlantı olmalı mıdır?
IF
, WHILE
, FOR
yerine GOTO
. Modular = gizli bir dahili uygulamadan ve temsilden tamamen ayrılmış, iyi tanımlanmış bir genel API'ye sahip modüller. (Ör. Modula, Mesa, Modula-2, Modula-3, sonraki Pascal lehçeleri ( UNIT
).)