Bazıları tarafından, eğer SOLID ilkelerini aşırı uçlarına götürürseniz, fonksiyonel programlamaya son verdiğiniz söylenir . Bu makaleye katılıyorum, ancak arayüz / nesneden işlev / kapanışa geçişte bazı anlambilimin kaybolduğunu düşünüyorum ve İşlevsel Programlamanın kaybı nasıl azaltabileceğini bilmek istiyorum.
Makaleden:
Ayrıca, Arabirim Ayrışma İlkesini (ISS) titizlikle uygularsanız, Başlık Arabirimleri yerine Rol Arabirimleri'ni tercih etmeniz gerektiğini anlayacaksınız.
Tasarımınızı daha küçük ve daha küçük arayüzlere doğru sürmeye devam ederseniz, en sonunda nihai Rol Arayüzüne ulaşırsınız: tek bir yöntemle bir arayüz. Bu bana çok şey oluyor. İşte bir örnek:
public interface IMessageQuery
{
string Read(int id);
}
Bir bağımlılık alırsamIMessageQuery
, örtük sözleşmenin bir parçası, çağrı Read(id)
, verilen kimliğe sahip bir mesaj arayacak ve döndürecektir.
Bunu, eşdeğer işlevsel imzasına bağımlı olmakla karşılaştırın int -> string
. Herhangi bir ek ipucu olmadan, bu işlev basit olabilir ToString()
. Eğer IMessageQuery.Read(int id)
bir ile uyguladıysan , ToString()
seni kasten yıkıcı olmakla suçlayabilirim!
Peki, işlevsel programcılar iyi adlandırılmış bir arabirimin anlambilimini korumak için ne yapabilir? Örneğin, tek üyeli bir kayıt türü oluşturmak geleneksel midir?
type MessageQuery = {
Read: int -> string
}
Without any additional clues
... belki de belgelerin sözleşmenin bir parçası olmasının nedeni budur ?