"généralement lorsqu'on fait de la Programmation procédurale il est souvent très difficile de faire un code claire et indépendant quand il s'agit d'une petite application et même d'une grande Le code est donc plus long à mettre à jour d'ou c'est apparentée à la Programmation spaghetti"
C'est absolument faux, mais puisque tu y tiens, je ne vais pas m'attarder là-dessus.
Pour ton modèle de données, je pense que tu devrais faire :
- Une entité "Conversation" avec un identifiant et un titre
- Une entité "Message" avec un identifiant, une date de création, un contenu et une clef étrangère vers un Utilisateur qui aurait créé la conversation, même si ça n'est pas obligatoire ("author_id").
- Une entité "ConversationParticipants" avec une clef primaire composée de l'identifiant de la conversation et de l'identifiant de l'utilisateur, et qui contient possiblement des champs supplémentaires (datetime de la dernière lecture par exemple ?). Ainsi pour chaque occurrence dans l'entité, tu sauras que tel membre participe à telle conversation.
Comme tu peux le voir, il s'agit davantage d'une problématique de conception de modèle de données qu'une histoire d'Objet/Procédural/Spaghettis/Rhubarbe.
Avant de te soucier de faire une "architecture MVC" et tomber dans la patternite, assure-toi d'avoir un modèle de données cohérent. Le reste viendra naturellement.
Allez, dans ma grande mansuétude, je te fournis un code SQL non testé de ce que cela donnerait :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 | CREATE TABLE board_users(
`id` INT PRIMARY KEY,
`username` VARCHAR(30),
# ...
);
CREATE TABLE board_private_conversations(
`id` INT PRIMARY KEY,
`title` VARCHAR(255)
);
CREATE TABLE board_private_conversation_messages(
`id` INT PRIMARY KEY,
`creation_date` DATETIME,
`content` TEXT,
`author_id` INT NOT NULL, # References board_users.id
`private_conversation_id` INT NOT NULL # References private_conversations.id
);
CREATE TABLE board_private_conversations_participations(
`author_id` INT NOT NULL, # References board_users.id
`private_conversation_id` INT NOT NULL, # References private_conversations.id
`last_read` DATETIME,
PRIMARY KEY(author_id, private_conversation_id)
);
|