Questo sito utilizza i cookie per migliorare servizi ed esperienza del lettore. Se decidi di continuare la navigazione consideriamo che accetti il loro uso . Per e informazioni sulla Privacy leggere la Google Policies Privacy

Se continui nella navigazione accetti il loro uso. OK

martedì 24 agosto 2010

WPFNotes (Parte 1): Progettazione applicazione e Database

Scommetto che capita un po' a tutti di dover gestire una gran quantità di post-it e di liste di TODO che crescono inesorabilmente. Per non parlare poi di tutti gli username-password da ricordare oppure della vostra lista di HowTo che è diventata talmente grande da essere ormai inutile perchè non riuscite più a trovare quello che vi serve.
Ebbene, ho sempre avuto questa idea per la mente, delle note che apparissero in base alla finestra che state visualizzando.
Così se per caso dovete ricordarvi una determinata cosa all'apertura della finestra di Excel, ecco che quella nota appare. Oppure non ricordate mai la password quando dovete loggarvi in un sito che usate una volta ogni diversi eoni e dovete sempre cercarla dentro a un'enormità di mail, ecco che in base al titolo della finestra del browser la nota viene visualizzata.
Ho deciso quindi di creare una bella applicazione che facesse al caso mio.
Vediamo allora di crearci un'elenco di funzionalità che vogliamo che la nostra applicazione abbia:
  • Ricerca fra tutte le finestre aperte in windows per controllare se ci sono note contestuali che combaciano
  • Ricerca nella finestra attiva per rendere più visibile la notifica di note
  • Possibilità di aggiungere delle note in cui specificare la finestra a cui 'agganciarle' usando regular expression in modo da rendere più flessibile la ricerca.
  • Visualizzazione, modifica ed eliminazione di note già scritte.
  • Associare Tag a ogni singola nota in modo da poter visualizzare anche note correlate.
Inanzi tutto vediamo di creare un database per salvarci le nostre note. Useremo SQLServer Express 2008.
Andiamo a creare la tabella per il salvataggio delle note:

USE [bsd_Notes]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[T_NOTE](
[NOT_KEY] [int] IDENTITY(1,1) NOT NULL,
[NOT_NOTA] [text] NULL,
[NOT_WINDOW_NAME] [nvarchar](4000) NULL,
CONSTRAINT [PK_T_NOTE] PRIMARY KEY CLUSTERED 
(
[NOT_KEY] ASC
)WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
a questo punto creiamo una anagrafe per la memorizzazione dei tag da associare (così potranno essere condivisi e più facilmente utilizzati per correlare fra loro le note)
USE [bsd_Notes]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[T_TAG](
 [TAG_KEY] [int] IDENTITY(1,1) NOT NULL,
 [TAG_NOME] [nvarchar](100) NULL,
 CONSTRAINT [PK_T_TAG] PRIMARY KEY CLUSTERED 
(
 [TAG_KEY] ASC
)WITH (PAD_INDEX  = OFF,
STATISTICS_NORECOMPUTE  = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS  = ON,
ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Quindi creiamo la tabella per la correlare le note con i tag:
USE [bsd_Notes]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[T_NOTE_TAG](
 [TNO_NOT_KEY_NOTE] [int] NOT NULL,
 [TNO_TAG_KEY_TAG] [int] NOT NULL,
 CONSTRAINT [PK_T_NOTE_TAG] PRIMARY KEY CLUSTERED 
(
 [TNO_NOT_KEY_NOTE] ASC,
 [TNO_TAG_KEY_TAG] ASC
)WITH (PAD_INDEX  = OFF,
STATISTICS_NORECOMPUTE  = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS  = ON,
ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[T_NOTE_TAG]  WITH CHECK 
ADD  CONSTRAINT [FK_T_NOTE_TAG_T_NOTE] 
FOREIGN KEY([TNO_NOT_KEY_NOTE])
REFERENCES [dbo].[T_NOTE] ([NOT_KEY])
GO
ALTER TABLE [dbo].[T_NOTE_TAG] CHECK CONSTRAINT [FK_T_NOTE_TAG_T_NOTE]
GO
ALTER TABLE [dbo].[T_NOTE_TAG]  WITH CHECK 
ADD  CONSTRAINT [FK_T_NOTE_TAG_T_TAG] 
FOREIGN KEY([TNO_TAG_KEY_TAG])
REFERENCES [dbo].[T_TAG] ([TAG_KEY])
GO
ALTER TABLE [dbo].[T_NOTE_TAG] CHECK CONSTRAINT [FK_T_NOTE_TAG_T_TAG]
GO
Il diagramma che ci troviamo è il seguente:
Diagramma del database

WPFNotes (Parte 2): Un po' di API Win32

Nessun commento:

Posta un commento