Pregunta

Introducción:

Estoy trabajando en una API que proporciona acceso a Picasa, Flickr y otros servicios de imágenes.

Tengo un WebAlbum clase (que proporciona acceso a las fotos anidados, álbumes si está permitido, y algunos meta-información).

Mi API permite al usuario no sólo para leer discos sino que también les permite crear nuevos álbumes. En el caso general, con el fin de crear un nuevo álbum, el usuario de la API debe utilizar un método de fábrica, lo que crea un álbum y luego llamar al método WebGallery#addAlbum (newAlbum).

Pero Flickr no permite la creación de discos vacíos, se requiere al menos una foto predefinido en cualquier nuevo álbum (para hacer agradable vista previa del álbum probablemente). En términos de Flickr esta primera foto se llama el Primary Photo. Así que con el fin de crear un álbum de Flickr, el usuario debe utilizar un método de fábrica, a continuación, añadir una imagen para el nuevo álbum, y luego WebGallery#addAlbum (newAlbum) llamada.

Problema:

En la clase momento WebAlbum tiene este método

public interface WebAlbum {

   ...

   public boolean requiresPrimaryPhoto ();
}

No se puede dejar este nombre porque PrimaryPhoto es sólo un término de Flickr. Puedo cambiarlo a

public interface WebAlbum {

   ...
   //with spaces: requires one added photo to create new album

   public boolean requiresOneAddedPhotoToCreateNewAlbum ();
}

Para sugerir un nombre más corto que tiene el mismo significado.

¿Fue útil?

Solución

boolean isEmptyAlbumAllowed

Otros consejos

public boolean needsDefault;

o, más descriptivo

public boolean needsDefaultImg;

EDITAR Otra pregunta que debe hacerse es si esta propiedad aún debe ser expuesto. Si usted quiere hacer la experiencia de la gestión de álbumes constante en todos los backends, entonces tal vez su biblioteca podría proporcionar imágenes por defecto cuando sea necesario. Un logotipo para su aplicación, tal vez. Los usuarios son poco probable que tenga discos vacíos durante mucho tiempo de todos modos.

Me gustaría ir con

public boolean requiresDefaultImage;

o

public boolean requiresAlbumImage;

Yo usaría algo así como allowsEmptyAlbum o emptyAlbumPermitted

Una vez dicho esto, añadiendo un extra de medios método que el usuario de las necesidades de la clase para saber que esto podría incluso ser un problema y recuerde que debe hacer el registro de entrada antes de añadir el álbum. Esto podría ser un problema porque la mayoría de los desarrolladores "quieren hacer las cosas rápido" y no sabría acerca de las diferencias entre los servicios.

A pesar de la adición de una nota en la documentación no es suficiente, porque mucha gente llamando "addAlbum" nunca leer la documentación del método, ya que parece sencillo (ver mi investigación para más detalles).

Lo ideal sería que sea capaz de crear diferentes fábricas para cada servicio (y proporcionar la información allí), o, si se tiene que utilizar una sola API, encontrar una manera de fallar con gracia o añadir tal vez una imagen de marcador de posición.

Creo que se puede hacer aún más corto mediante la eliminación de la porción del álbum redundante.

public boolean canBeEmpty();
   public boolean requiresInitialPhoto ();

   public boolean doesOnePhotoExist ();

   public boolean needsOnePhoto ();

Crear clases FlickerWebAlbum y PicasaWebAlbum. Cada uno de ellos representa un comportamiento específico a cada proveedor.

La respuesta corta a su pregunta:

boolean isDefaultPhotoRequired;

La respuesta larga: el requisito de fotos predeterminado no es compartida por todos los WebAlbums, por lo que es un candidato perfecto para el uso de la herencia. Mueva que el comportamiento de una subclase específica de Flickr. Se podría hacer algo como añadir la creación de esa defaultImage a un Flickr.init ().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top