2013-03-28 1 views
0

Donc, je travaille sur un projet dont le but est de collecter des données de l'utilisateur qui effectue une recherche. J'ai modélisé les différents types d'informations à collecter à partir de la recherche en tant qu'objets. Je prévois de créer une sorte d'objet de gestion qui créera et manipulera ces objets.Objet qui fonctionne sur d'autres objets

Ma question est, y a-t-il des modèles ou des décisions de conception que je devrais prendre en considération en créant cet objet de «gestion»? Une chose qui vient à l'esprit est que cet objet sera étroitement couplé aux objets "données de recherche", car il sera probablement créer et les enregistrer dans ses méthodes. Je ne pense pas que l'injection de dépendances fonctionnerait dans ce cas, car plusieurs copies du même objet pourraient devoir être travaillées, il serait donc impossible de savoir ce que serait la liste des paramètres.

Nous vous remercions de votre compréhension.

+2

Ma pensée générale sur la programmation orientée objet n'est pas d'utiliser des objets si cela n'est pas nécessaire. Vous devriez avoir le problème et penser à la solution, ne pas changer votre problème de sorte qu'il s'adapte à une méthode particulière de résolution. – Voitcus

Répondre

1

Je pense qu'il serait préférable de créer une classe parente ou un modèle pour tous ces autres objets ou enfants à suivre ou à hériter. Par exemple, disons que vous voulez obtenir ou définir des données dans un objet particulier. Si les noms des champs de données sont différents, vous rencontrerez des problèmes.

Disons que vous avez un objet appelé GoogleSearch et un objet appelé YahooSearch. Si la requête saisie par l'utilisateur dans GoogleSearch peut être récupérée par la méthode $google->getQuery() et que la requête YahooSearch doit être récupérée en utilisant $yahoo->getInput() alors évidemment vous rencontrerez des problèmes à moins que vous ne vouliez spécifier manuellement des informations comme cela quand elles se présentent. Cependant, si vous pensez à des choses comme celle-ci avant de développer le framework, il devient beaucoup plus facile d'automatiser tout. Dans ce cas, il est prudent de dire que si vous construisez une collection de données à partir de recherches d'utilisateurs, toutes les recherches partageront certains attributs. Par exemple, - quel moteur de recherche utilisaient-ils? - Quelle était la requête entrée? - Quand la recherche a-t-elle eu lieu? - de quelle ip? - L'utilisateur a-t-il sélectionné l'un des résultats? - L'utilisateur at-il effectué une recherche sur un ordinateur, un appareil mobile, un autre? Compte tenu de ces considérations minimales, nous pourrions concevoir un système intégrant tous ces attributs. Par exemple, cela pourrait être votre classe parent:

class Search { 
    protected $engine, $query, $when, $who, $browserType; 
    function __construct() { 
     $this->when = time(); 
     $this->browserType = $_SERVER['HTTP_USER_AGENT']; 
     $this->who = $_SERVER['REMOTE_ADDR']; 
    // some more class methods 
    } 
} 

alors vous pourriez hériter de cette classe pour créer des types de recherche spécifiques comme ceci:

class GoogleSearch extends Search { 
    function __construct() { 
     // set the engine to Google 
     $this->engine = 'Google'; 
    } 
} 

Quelques autres choses à considérer pourrait être la portée ou la visibilité des variables. Ici, je les ai déclarés comme protected ce qui signifie essentiellement qu'ils sont privés, mais peuvent être accessibles par des enfants ou des classes d'extension. J'espère que cela aidera, si vous avez d'autres questions ou que je n'ai pas compris le vôtre, s'il vous plaît faites le moi savoir et je vais essayer d'aider.

+0

Au début, j'allais dire que vous ne compreniez pas complètement ce que j'essayais de faire, mais ensuite j'ai cliqué. Je pensais à l'objet de gestion en termes de programmation procédurale. Par exemple, j'allais avoir quelque chose comme une méthode gatherSearchData() qui prendrait les données, puis créerait, manipulerait et enregistrerait les objets de recherche. Au lieu de cela, j'ai besoin de modéliser la recherche elle-même, comme vous l'avez suggéré. Je ne pensais pas à la mentalité OOP. – maxiscool

0

Je vous suggère de jeter un oeil à la liste des motifs créationnelle ici http://en.wikipedia.org/wiki/Software_design_pattern

Résumé usine, le constructeur, la méthode usine tout peut demander à ce que vous recherchez. L'injection de dépendance n'est pas un concept approprié pour ce que vous demandez. DI facilite le câblage des éléments lors de l'exécution et supprime le codage en dur des dépendances. Pas vraiment la même chose.

Questions connexes