2008-12-31 10 views
5

Después de preguntar organising my Python project y luego calling from a parent file in Python me está ocurriendo que será mucho más fácil poner todo mi código en un archivo (los datos se leerán en un archivo externo).Todo el código en un archivo

Siempre he pensado que esta era una mala organización de proyectos pero parece ser la forma más fácil de lidiar con los problemas que creo que enfrentaré. ¿Acabo de obtener el extremo equivocado con el conteo de archivos o no he visto una gran guía en proyectos grandes (para mí)?

+0

¿Eres la única persona que trabajará en el código en cualquier momento? –

+0

Sí, de ahí que me esté ocurriendo que podría ser una idea viable. Si hubiera incluso 1 persona más, no consideraría esta opción. – Teifion

Respuesta

12

Si está planeando utilizar cualquier tipo de SCM, lo van a atornillar. Tener un archivo es una forma garantizada de tener muchas colisiones y fusiones que serán difíciles de manejar con el tiempo.

Cumpla con las convenciones y separe sus archivos. Si nada más que salvar al tipo que un día tendrá que mantener su código ...

+1

+1 - Estoy de acuerdo con el punto SCM. Es una inversión o una inversión a largo plazo aquí. Los proyectos de software no son herencia de un solo programador. Tome un atajo ahora y tendrá que pagar más tarde. Así que es mejor tomar una decisión difícil y un poco de dolor ahora. Es de todos modos para aumentar las habilidades de organización de su código. –

+1

Um, cualquier SCM decente debería ser capaz de manejar cómodamente los cambios en el mismo archivo, especialmente cuando solo hay una persona que va a editarlo. Incluso el más antiguo que conozco, RCS, funciona bien con un solo archivo. – ShreevatsaR

+0

"solo hay una persona que va a editarlo", ¿será ese el caso también? ¿No es una suposición considerable de hacer? a menos que sea un proyecto de la universidad que terminará cuando se presente. –

4

Si su código va a funcionar junto todo el tiempo de todos modos, y no es útil por separado, no hay nada de malo en mantener todo en un archivo Puedo pensar en al menos paquete popular (BeautifulSoup) que hace esto. Claro hace la instalación más fácil.

Por supuesto, si parece que, en el futuro, podría usar parte de su código con otro proyecto, o si el mantenimiento comienza a ser un problema, entonces preocúpese de organizar su proyecto de manera diferente.

Me parece que, a partir de las preguntas que ha estado formulando últimamente, está preocupado por todo esto un poco prematuramente. A menudo, para mí, este tipo de problemas se abordan mejor un poco más adelante en la solución. Especialmente para proyectos más pequeños, mi objetivo es obtener una solución que sea correcta, y luego óptimo.

+0

Estoy llegando al final de un proyecto que pesa 11k líneas de código y fue tan fácil solo porque lo organicé muy bien para empezar.Eso fue en PHP, pensé que debería hacer lo mismo aquí para ayudar a que esto sea más fácil :) – Teifion

+0

emerge, que es el programa principal del administrador de paquetes de Gentoo Linux, es un solo archivo que consta de ~ 7000 líneas de código Python. –

2

Siempre es un argumento versos ahora. Si estás bajo el arma para hacerlo, hazlo. El control de la fuente será un problema más adelante, ya que con muchas cosas no hay una respuesta en blanco y negro. Debe ser responsable tanto del plazo como del mantenimiento a largo plazo del código.

+0

¡Buena frase resumen! Las prácticas que facilitan el trabajo de primer corte rápido a menudo no son aquellas que respaldan el mantenimiento y la reutilización a largo plazo. –

2

Si esa es la mejor manera de organizarlo, probablemente esté haciendo algo mal.

Si se trata de algo más que un simple programa de juguete o un simple script, debe dividirlo en archivos separados, etc. Es la única forma sensata de hacerlo. Cuando su proyecto sea lo suficientemente grande como para necesitar que alguien más lo ayude, entonces hará que el SCM sea mucho más fácil.

Además, tarde o temprano tendrá que agregar una utilidad separada a su proyecto, que va a necesitar algunos códigos/estructuras comunes. Es mucho más fácil hacer esto si tienes archivos fuente separados que si solo tienes uno grande.

2

Dado que Calling from a parent file in Python indica serios problemas de diseño, yo diría que tiene dos opciones.

  1. No tiene un módulo de biblioteca intente devolver la llamada a main. Tendrás que volver a escribir cosas para arreglar esto.

    [Un componente importado que llama al programa principal es una dependencia inadecuada. Y Python no lo admite porque es un diseño pobre.]

  2. Ponlo todo en un solo archivo hasta que encuentres un mejor diseño con las dependencias unidireccionales correctas. Luego, tendrá que volver a escribir para solucionar los problemas de dependencia.

Un módulo (un solo archivo) debe ser una pieza lógica del código relacionado. No todo. Ni una sola definición de clase. Hay un término medio de modularidad.

Además, debe haber un gráfico de dependencia de una vía del programa principal a los componentes (que NO dependen del programa principal) a las bibliotecas de utilidades y lo que no (que no conoce los componentes O el programa principal .

circular (o mutua) dependencias menudo indican un problema de diseño. las devoluciones de llamada son una manera de salir del problema. Otra forma es descomponer los elementos circulares para obtener una gráfica adecuada de una sola vía.

2

en cuanto a su preguntas anteriores diría todo el código en un archivo sería un buen estado intermedio en el camino a un com refactorización completa de su proyecto. Para hacerlo, necesitará un conjunto de pruebas de regresión para asegurarse de no interrumpir el proyecto mientras lo refactoriza.

Una vez que todo el código está en un archivo, sugiero iterando la siguiente:

  1. identificar un pequeño grupo de clases interdependientes.

  2. Coloque esas clases en un archivo separado.

  3. Agregue las pruebas unitarias para el nuevo archivo separado.

  4. Vuelva a probar todo el proyecto.

Dependiendo del tamaño de su proyecto, que no deben tomar demasiadas iteraciones para que usted pueda llegar a algo razonable.

Cuestiones relacionadas