Do you think the current software design is right?
Perhaps there is no objectively βcorrectβ design - there are only the best or worst projects. :) It seems that you are on the right track, but I would advise you to leave your GUI and view the decoupled ones from internal services. For instance:
View --- Controller --- Service
This way, View knows how to display things (i.e. IM messages, web content, or something else) and passes requests from the user to the Controller . Controller receives notifications from Service and updates the View . Service does not know anything about the interface (therefore, it can be accessible for scripts, which is very useful) and simply implements the protocol necessary for communicating with a network service. You will have a separate set of these three classes for each separate server system and a common controller for managing the application on a global level.
It seems very difficult to associate all View / Controller with each part of the model, is it normal that it takes so much work?
Perhaps yes, you are trying to use a non-trivial application. I assume you are using MVC style architecture. It may take more effort to get things right, but it's definitely worth it. The more complex your application, the more you will benefit from bundle and decoupling.
Would it be better to create a new thread for each service request?
Given that all services are network-based, you need to block blocking I / O calls (such as reading sockets) from blocking the main GUI thread. Thus, you need to either fully use asynchronous I / O with callbacks in one thread (not very often), or have a separate thread for each network session (the most common approach). I would not recommend creating a new thread for each individual request, but for the entire session. You need to be careful to avoid common threading issues such as race conditions and dead ends (this topic can fill the book). The thread will have to send a message back to the GUI for notifications, since you cannot update your GUI from the context of another thread.
(for example, TDigg receives a message from a button, creates a stream that will create TidHTTP, generates a request to the server, waits for a response, analyzes the response, sends a message to each observer (callback), and then release the stream.
It looks like you have a GUI associated with your controller and protocol handler. I suggest you separate the interface and the end, and keep things untied.
If I use the previous idea, will it not create too many threads and make the computer slower and less responsible?
Themes are commonly used to make a computer more responsive. Creating threads has some overhead and requires great care for proper synchronization. But if you have one thread per network session, overhead will not slow down, since you will only have the most.
Is SQLite 3 great for storing all the data on the client? (data can be mail, rss channel, etc.), so the time can be quite large.)
SQLite is a great database for this purpose. It is used by some of the largest software houses in the world for client-side storage management. It is very fast and efficient, and I am sure that it can keep up with your application.
You seem to be involved in a complex application. I suggest you buy a book on concurrent programming and read a little more about streaming usage. This is a very complex problem and can lead to errors that are incredibly difficult to track if not programmed with great care. Good luck