Büyük modüllerin ayrılmasının olumsuz yan etkileri var mı? [kapalı]


21

Bir github projesine göz atıyordum ve 10 binden fazla çizgiye sahip bu modülü buldum .

Tek bir modülde bu kadar kodun olması yaygın bir uygulama mıdır?

Bana öyle geliyor ki bunun çoklu modüller üzerine bölünmesi gerekiyor. Belki her db motor için bir tane.

Geliştiricinin böyle büyük bir modül oluşturmasından ("hepsini bir yerde bulundurmaktan başka") ya da bölmekten ayırmanın ne kadar olumsuz olduğu ("karmaşıklık" dışında) ne yararlanıyor?


8k satır değil - kesin!
BЈовић

4
Modülün boyutu değil, nasıl kullandığınızı ...
jmq

4
Programların insanlar tarafından okunması ve sadece tesadüfen bilgisayarların çalışması için kullanılması amaçlanmıştır - Donald Knuth.
Mahmoud Hossam

1
Bir modül / alt modül belirli bir şey yapması gerekiyordu. Python'da 2 sayı eklemek için bir (aptal) modül sadece 2 satır olacaktır. Daha karmaşık bir şey yapmak için bir modül kesinlikle daha büyük olacaktır. Modül / alt modülü sadece bir işlevle sınırla. Bunu senin kriterin olarak tut.
c0da

Nesneye yönelik kod için en önemli nokta, kaygıların ayrılması ve aşırı kuruluk ile iyi organize edilmiş bir sınıf yapısına sahip olmaktır. Modül o zaman bölünmesi kolay olanıdır.
Acumenus

Yanıtlar:


14

Karşılaştığınız şey “ Tanrı nesnesi ” dır , çünkü her şeyi yapar veya her şeyi bilir. Ondan kaçın (eğer yapabilirseniz).

Modül başına belirli sayıda LOC yoktur, ancak koda göz atmayı ve yöntemlerin ne yaptığını kolayca anlamayı kolaylaştıran bir şey olmalıdır. Kişisel deneyimime göre, eğer modülünüz 1k satırın * üzerine çıkarsa , yanlış bir şey yapıyorsunuz demektir.

* 1k hatlı bir modül bile çok büyük.


9
Verilen örnek bir Tanrı Nesnesi değildir , aslında sadece tek bir .py dosyasında olan en doktesten de dahil olmak üzere bütün bir sınıf hiyerarşisidir . Bu ideal olmayabilir, ancak bunu yapmak isteyebileceğiniz pragmatik nedenler var ve BillThor'un önerdiği gibi, kodun kendisi aksi halde makul derecede iyi yapılandırılmış. Elbette, bir Tanrı Nesnesinin klasik tanımına uymuyor , sadece oldukça karmaşık bir işi olan ve bir dizi farklı senaryoya uyarlanması gereken bir şey.
Mark Booth,

6

Bu, tipik boyut sınırlarının geçerli olmadığı bir modül gibi görünmektedir. İşlevselliğin çoğunluğu ilk 2k kod satırında ve yorumda. Dosyanın geri kalanı, modüle sıkıca bağlanmış görünen birçok adaptör sınıfı ve diğer destek sınıfları gibi görünmektedir. Diğer dillerde, sınıflar makul boyutta ayrı dosyalarda olacaktır.

Bazı daha fazla belge dizesi yararlı olabilir, ancak bunlar zaten büyük bir modülün boyutunu artıracaktır. Kod, gerektiğinde uygun yorumlarla net ve açıklayıcıdır.


5

Tabii ki gerçek "limit", projenize ve birçok faktöre göre değişir.

Ama ben bir kural ile uğraşıyorum: 200 satır terbiyeli Python. Yani, Python'da yazılmış hiçbir C veya Java kodu değil, Python'da iyi Python.


1

Vay.

Sanırım bunun için tam cevabı bilmiyorum, ama "Bir Python modülü ne kadar büyük olmalı?" Parnas kavramı olarak, bir sır saklıyor. Bu durumda, modül bunu uygun şekilde yapıyor gibi görünüyor (ve gizlediği büyük bir sır bu).

Ben daha sonra, kuplaj ve uyumla ilgili çok şey hakkında konuşma yapan gazetelere bakıyorum. Belki de birçok db modülüne sahip olmak, kötü uygulama olarak kabul edilen, yani daha düşük uyum ve daha yüksek eşleşme olanı arttırmak için modüller arasında çok fazla çağrı yapılmasını zorlar.

Programcılardan bahseden deneysel verilerin, basitlik ve anlayış uğruna iyi uygulamaları feda etmeye karar vermesine rağmen, ne kadar iyi uygulama gerektirse de gördüm. Aslında, iyi uygulamalar arasında da bir çatışma olabilir. Diyelim ki performans genellikle daha sonra bakım yapan insanları mutlu etmez. Bu kadar büyük bir modülle okunaklılığın nasıl geliştirileceğinden emin değilim.

Dikkatimi çektiğim diğer bir şey, kodun bir kısmının genel olarak belirtilmesi ve dbs'nin geri kalanının uzatılmasıdır. Bir piton programcısı değilim, ama belki de bu bir şeyi haklı çıkarabilir mi?

Son bir cevabım yok ama umarım birisi de bu noktaları vurguluyor!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.