Hen*_*sel 6 java model-view-controller design-patterns java-me
作为编程的初学者,当我遇到墙壁时,它总是让我烦恼.目前,其中一面墙是共同依赖的物体.
正如你在我的问题历史中所看到的,我正在研究一个黑莓应用程序,我在其中实现了一些我称之为MVC模式的东西,但它并不是我认为它的意思.
你看,一个新手程序员,你看这个图形的摘要,你就会明白它背后的想法.但实施它是另一回事.
alt text http://www.ibm.com/developerworks/wireless/library/wi-arch6/theoretical.gif
请不要停止阅读:)我正在向你展示我的一些代码,其中包含一些黑莓特定的东西,但你应该看看我在做什么.
我的申请的主要入口点
public class ContactManager extends UiApplication
{
private static ContactManagerMainScreenModel MainScreenModel = new ContactManagerMainScreenModel();
private static ContactManagerMainScreen MainScreenView = null;
public static void main(String[] args)
{
new ContactManager().enterEventDispatcher();
}
public ContactManager()
{
MainScreenView = new ContactManagerMainScreen(MainScreenModel);
// Displays the Splashscreen then opens the Mainscreen
new SplashScreen(UiApplication.getUiApplication(), MainScreenView);
}
}
Run Code Online (Sandbox Code Playgroud)
主屏模型
public class ContactManagerMainScreenModel
{
ContactManagerMainScreen v;
// Loading Local Storage
LocalContactStorage LocalContactStorage = new LocalContactStorage();
// Define Data List
private Vector vContacts_Favorites;
public void register(ContactManagerMainScreen v)
{
this.v = v;
}
// Retrieve Favorite Contacts from Persistant Storage
public Vector getFavoriteContactsFromLocalStorage()
{
vContacts_Favorites = LocalContactStorage.getFavoriteContactsFromLocalStorage();
return vContacts_Favorites;
}
// Put Retrieve Favorite Contacts from Persistant Storage
public void saveFavoriteContactsToLocalStorage()
{
LocalContactStorage.saveFavoriteContactsToLocalStorage(vContacts_Favorites);
}
}
Run Code Online (Sandbox Code Playgroud)
MainScreenController
public class ContactManagerMainScreenController
{
private ContactManagerMainScreenModel _model = null;
private ContactManagerMainScreen _view = null;
public ContactManagerMainScreenController(ContactManagerMainScreen view, ContactManagerMainScreenModel model)
{
this._model = model;
this._view = view;
}
public void HideFavoriteList()
{
if( this._view._ContactList.getManager() != null)
{
this._view._ContactList.getManager().delete(this._view._ContactList);
} else
{
this._view._bottom_box.add(this._view._ContactList);
}
}
}
Run Code Online (Sandbox Code Playgroud)
还在那儿?好的 ...
我的问题在于,我想使用控制器来更改UI元素,比如显示弹出框,隐藏某些内容或其他内容.
但是所有这些UI元素都在View中定义(此处为ContactManagerMainScreen),因此必须向Controller提供对View的引用.这导致我的共同依赖对象的痛苦.
在声明视图之前,我无法创建控制器.如果没有允许控制器更改UIElements的要求,则没有问题(如图中所示).
我现在正在做的是View创建了Controller
controller = new ContactManagerMainScreenController(this , model);
Run Code Online (Sandbox Code Playgroud)
这有道理吗?我想了解模式,所以调用我的代码垃圾或任何你喜欢的东西:)我只是想学点东西.
PS请原谅我的英语不好:)
Bil*_*l K 11
MVC是一个有趣的抽象,但有一些问题.
实际上,控制器和视图通常是成对的 - 即使理论上你应该能够替换任何一个而不是另一个,实际上不同视图的接口机制是如此不同,以至于控制器和视图结合在一起.
我见过的关于Java的最佳描述是视图是你的swing组件,因此你的视图代码部分只不过是将这些组件放在屏幕上.
您的控制器是该类的其余部分,监听器以及与视图交互的其余代码.
我的建议是不要过分担心隔离视图和控制器,但是说,我完全支持在模型和视图/控制器之间保持非常强大的分离.
编辑/高级:我使用了一种模式,其中控制器和视图是隔离的,它更灵活,但它往往是更多的工作.我认为Struts使用绑定模型 - 如果你想看到一些抽象技术,你可能会看到那里或搜索有关"绑定"摆动控件的东西.