标签: application-design

这是javascript关闭的有效用例吗?

我已经查看了SO上的所有其他(优秀)答案(尤其是:JavaScript关闭如何工作?)但我想要您对我对该概念的理解的反馈.

据我所知,一个用例是隐藏私有方法的实现,不受公共访问.

我想到的另一个是它作为工厂发电机:

<script>

function carFactory( make ) {

    var m = make;
    return { manufacture: function ( model ) 

        {console.log("A " + m + " " + model + " has been created");}

    }
}

toyotaFactory = carFactory("toyota");
hondaFactory = carFactory("honda");

toyotaFactory.manufacture("corolla");
toyotaFactory.manufacture("corolla");
hondaFactory.manufacture("civic");

</script>
Run Code Online (Sandbox Code Playgroud)

这输出:

A toyota corolla has been create
A toyota corolla has been created
A honda civic has been created 
Run Code Online (Sandbox Code Playgroud)

那么你认为它是闭包的有效用例(即使用相同的代码库创建多个工厂)吗?或者我可以使用更好的东西来实现同样的目标吗?

请注意,问题不在于闭包的技术实现,而在于应用程序设计/开发中的有效用例.

谢谢.

javascript closures application-design

9
推荐指数
1
解决办法
213
查看次数

MVVM中构建显示各种页面的菜单的最佳方法是什么?

我想用MVVM模式构建一个简单的应用程序.

该应用程序将包含两个主要部分:

  • 菜单在上面
  • 内容如下

导航很简单:

  • 每个菜单项(例如"管理客户"或"查看报告")将使用具有某些特定功能的新页面填充内容区域

之前使用的代码已经完成了这一点,其中菜单项的代码隐藏事件处理程序已加载所有页面,应该显示的那个作为StackPanel的子项加载.但是,这在MVVM中不起作用,因为您不希望手动填充StackPanel,而是显示例如带有DataTemplate的"PageItem"对象等.

那些用MVVM制作了这样一个简单的点击菜单应用程序的人,你的基本应用程序结构是什么? 我正在考虑以下几点:

MainView.xaml:

<DockPanel LastChildFill="False">

    <Menu 
        ItemsSource="{Binding PageItemsMainMenu}" 
        ItemTemplate="{StaticResource MainMenuStyle}"/>

    <ContentControl 
        Content="{Binding SelectedPageItem}"/>        

</DockPanel>
Run Code Online (Sandbox Code Playgroud)

其中菜单填充了"PageItems"集合,DataTemplate将每个"PageItem对象"的标题显示为每个MenuItem的标题.

ContentControl将填充一个具有完整功能的View/ViewModel对,但我不确定.

wpf mvvm application-design

8
推荐指数
1
解决办法
7796
查看次数

使用Node.JS

昨晚我转储Windows 7并将我的硬盘驱动器格式化为基于Linux的操作系统,纯粹是因为我想开始使用Node.JS

所以我已经安装了Node.JS并做了一些测试工作,http服务器和套接字等.

我想要做的是构建一个与MVC框架紧密集成的HTTP服务器,但在开始之前我需要学习如何在Node中高效构建.

例如在PHP中作为我的框架,我将创建一个引导加载系统来加载所有基类等,然后我会激活我的事件系统准备开始附加回调.

我将继续处理请求等,直到生成输出,然后将其发送到将处理标头等的输出处理程序

但Node是一个全新的环境,我想知道在Node中构建系统的最佳实践.

我正在寻找的信息更多的是与设计结构有关,而不是应用程序的实际编码,如何加载lib加载库的位置等等

任何帮助表示赞赏.


到目前为止,我的WebApplication很顺利,我已经构建了我的应用程序非常传统和一点程序.

我开始的是创建一个像这样的目录结构:

<root>
    startup.js
    /public/
        favicon.ico
        /images/
        /stylesheets/
        /javascripts/
    /system/
        init.js
        config.js
        /libs/
            /exceptions/
                http.js
                server.js
    /application/
        /views/
            /_override/
                /errors/
                    generic.view
            /partials/
                sidebar.voew
            index.view
        /controllers/
             index.js
        /models/
            users.js
Run Code Online (Sandbox Code Playgroud)

这个目录结构就像大多数基于MVC的Web应用程序一样,所以使用这种方法我觉得很舒服.

启动文件是由节点作为入口点执行的,node startup &看起来像这样:

/*
    * Header of t he file, Copyright etc
*/

var _Intitialize = require("./system/init.js");

//Displays the command line header, title, copyright etc
_Intitialize.DisplayCommandLineHeader();

//Check the enviroment, Permissions, Ports etc
_Intitialize.CheckEnviroment();

//Start the server and …
Run Code Online (Sandbox Code Playgroud)

structure application-design node.js

8
推荐指数
1
解决办法
3752
查看次数

MVC:为什么我们需要"控制器",或者何时应该使用这种模式?

我已经阅读了很多关于MVC的出版物,但我仍然无法清楚地理解为什么我们需要"控制器".

我经常在客户端 - 服务器模型中编写应用程序

服务器包含所有的业务逻辑,它对gui一无所知.它完成了主要工作,并且尽可能便携.

client是一个GUI,它绑定到服务器,与用户交互,从用户向服务器发送命令.

我喜欢这种架构,我无法弄清楚为什么人们真的需要在客户端服务器之间再添一个媒体,这似乎是控制器

UPD:简单示例:假设我们需要编写一些数据记录器.数据来自COM端口,它由某些协议编码.需要在简单的日志窗口中显示收到的消息.

我该怎么做:

服务器包含以下项目:

  • Data_receiver:其实从COM端口接收到的原始数据,但它的接口,所以我们能够做出一些从其他来源接收数据,另一个类;
  • Data_decoder:获取原始数据并返回生成的解码消息,它也是接口,因此我们可以轻松地更改编码协议;
  • Data_core:在使用的情况下Data_receiverData_decoder,发射信号到客户端.

客户端包含以下项目:

  • Appl核心:创建Data_receiver(连接到COM端口的那个)Data_decoderData_core(它接受引用Data_receiverData_decoder实例)的实例,还创建GUI简单的日志窗口(参考Data_core);
  • GUI简单日志窗口:绑定到Data_core,即侦听由其发出的信号,并显示接收的数据.

当我理解我所读到的关于MVC的内容时,GUI实际上不应该从中接收消息Data_core,因为控制器应该这样做,然后将数据传递给GUI.但是如果GUI直接从模型中获取这些数据会发生什么不好的事情?

model-view-controller client-server application-design

8
推荐指数
1
解决办法
2248
查看次数

网页太多了

关于构建Web应用程序的页面:

最近,我发现自己创建的网页比以前更简单.之前,我会尝试将尽可能多的功能集中到一个页面中,以防止有大量页面.

我开始意识到这只会使事情变得更加复杂,复杂和令人困惑.为什么没有更多页面?我认为我这样做的原因是因为我不希望用户必须浏览其他页面; 只是为了在一个页面上拥有所需的所有功能.

好吧,这些良好的意图变成了一个过于混乱的用户界面和非常难以管理的源代码.我是一名新开发人员,我正在努力反思我正在做的事情,以便我能够改进.如果它有所作为,我正在开发ASP.net(尽管这些可能是任何平台的考虑因素).

我的问题是:

  • 我是否在思考这些事情?
  • 还有其他人发现自己这样做了吗?
  • 幸福的媒介在哪里?

asp.net web-applications application-design

7
推荐指数
1
解决办法
468
查看次数

有一个空的基类坏设计?

我需要一个我的DTO类的基类,它将用于我的通用接口.

但DTO课程没有任何共同之处.它们只是包含一些属性的哑类.

public void GetGridData()
{

   IDataForGrid<DTOBase> aa;

   if(request == 1) aa = new CustomerGridData;
   if(request == 2) aa = new OrderGridData;

   var coll = aa.GetList();
}

public class CustomerGridData : IDataForGrid<CustomerDTO>
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

.net c# interface application-design

7
推荐指数
2
解决办法
4574
查看次数

设计iPhone iOS4应用程序行为:在后台运行与终止应用程序

我们正在为汽车司机开发iPhone GPS应用程序.

您可能知道,iOS4引入了多任务处理,因此我们的应用程序可以在后台运行 - 事实就是如此.这是其功能的一部分.

问题在于在iOS4上关闭应用程序的标准方法.以下是两种情况:

1)用户想要将应用程序放到后台:

通常,在iPhone iOS4上,它就像按"主页"按钮一样简单.

2)用户想关闭应用程序(即到达目的地点后):

标准iPhone iOS4程序如下:

  • 按"主页"按钮 - 应用程序进入后台
  • 按两次"主页"按钮 - 显示正在运行的应用程序列表
  • 点击并按住其中一个应用程序图标 - 每个图标上都会显示"摇晃"和" - "符号
  • 点击用户希望终止的应用程序图标上的" - "符号

用户每次到达某处(例如,每天两次)都必须终止我们的申请,以节省他的电池.如果他不这样做 - GPS会很快耗尽所有电池电量.此外,我们无法在后台运行时禁用GPS,因为我们需要主要应用程序功能的精确位置信息.

当然,您无法更改应用程序中"主页"按钮的行为(即可接受AppStore).此外,我认为将预期行为改为与iPhone平台上的其他应用程序完全不同的东西并不是一个好的解决方案.

你觉得怎么样?你知道任何好的解决方案吗?我们有一个想法,但我不想向你提出任何建议.

我们的解决方案非常简单:只需在屏幕右上方显示小的"x"按钮即可.点击它会终止应用程序(可能在一些确认问题之后).

这个解决方案有一个很大的优势:它不会改变默认的系统行为 - 用户意识到iOS4多任务使用仍然可以按下"主页"按钮在后台运行应用程序并以iPhone方式关闭它.

你怎么看?

iphone application-design multitasking ios4

7
推荐指数
2
解决办法
6409
查看次数

为Finder.app编写Snow Leopard服务

我目前正在寻找解决问题,因为无法在Finder中快速创建新文件.我将开源我写的东西因为我认为Mac社区需要解决这个问题.

在Windows上,您可以右键单击,创建新的文本文件.OS X,您应该可以使用这样的服务来执行此操作:

  • 右键单击>服务>创建新文本文件

在Snow Leopard中编写Finder 服务理论上是实现这一目标的方法,尽管我还没有找到任何示例代码.(我承认我只是简单地查看了文档).

我不确定如何开始,Apple是否在Xcode中提供服务模板.基本上我正在寻找帮助以使运行的工作服务项目.那么实现代码对于我在Obj-C中编写应该是相当微不足道的.那么我该怎么做才能创建一个新的工作服务项目呢?如果我对此有误,请告诉我正确的方法,请提供示例代码或一些步骤让我开始.

编辑:相信我们,我不是OS X菜鸟.尝试了很多应用程序来实现解决方案:PathFinder,Automator,终端等,我对它们都不满意.

我想创建一个可右键单击的菜单项来创建新文件,就像Windows一样.如果此API不允许我这样做,那么我将在必要时修改系统文件.但我宁愿这样做也不需要我攻击OS X.

可悲的事实是,当Snow Leopard发布并且开发者不满意时,Apple禁用了第三方上下文菜单项.您可以使用Automator在上下文菜单下创建服务,但它非常有限.

是的,Quicksilver是我此刻创建文件的方式,除非我在我touch ~/Desktop/file.txt或任何地方都在终端.

如果您无法通过提供Xcode项目的源代码来编写服务来回答我的问题,请保留您对我应该如何使用计算机的意见.无论如何,我想在我自己实施之后,我可能会回答我自己的问题.

cocoa objective-c application-design osx-snow-leopard

7
推荐指数
1
解决办法
4169
查看次数

外键中的循环依赖:使用它还是避免使用它?

我的应用程序将大量数据从数据库加载到复杂的数据结构中.内存数据结构重新组合数据库的结构,这意味着如果数据库包含以下表:

  • 表A,键是A1
  • 表B,键是B1,其中一列是表A的[键]的外键
  • 表C,键是C1,其中一列是表B的[键]的外键

然后我有A,B和C类,以及:

  • B(B :: m_a)的数据成员是指向A的指针
  • C(C :: m_b)的数据成员是指向B的指针

这意味着如果我加载数据库,我必须以正确的顺序加载它.如果我首先加载C,那么它会抱怨它不能设置值C :: m_b,因为它应指向的实例未加载.

问题是当A中的列也是其他表之一的外键时,让我们说C.

我可以通过将所有外键加载为字符串来解决问题,然后在加载所有数据后执行查找,但由于我有时需要加载数百万条记录,因此我无法在这些上花费内存(尽管是临时的) )字符串.

阅读好的设计(例如"大规模C++软件设计"一书),在我看来,根本没有循环引用是一个坏主意.例如,如果文件XH包含YH,但是YH也包括XH,那么您可能设计不好; 如果X类依赖于Y类,反之亦然,那么你可能有一个糟糕的设计,应该通过提取这个依赖并引入第三个Z来解决,它取决于X和Y(X和Y将不再依赖于彼此) .

将此设计规则扩展到数据库设计是一个好主意吗?换句话说:防止外键中的循环引用.

database-design foreign-keys application-design application-dependency

7
推荐指数
2
解决办法
6225
查看次数

如何设置启用SAML SSO的初始用户/角色

我们是服务提供商。假设在我们的应用程序中,我们最初拥有自己的用户/角色管理。允许具有不同角色的不同用户使用不同的功能。因此,当用户登录时,我们需要知道该用户具有哪些角色,并准备适当的UI。我们具有管理员角色,具有此角色的用户可以将角色分配给其他用户。

我们正在考虑为我们的应用程序启用SAML SSO,现在的问题是我们如何为每个用户设置角色。

解决方案1,我们依靠IdP为每个登录用户提供角色信息,该角色信息可能会随Assertion一起提供,但这可能不适用于所有IdP。

解决方案2,我们仅从IdP检索用户,并在我们自己的应用程序中管理角色。例如,当我们获得一个断言时,我们检索用户名(或电子邮件地址),并与数据库中的一条记录匹配,如果该记录不存在,我们会自动为此新用户创建一个。然后,我们依靠具有管理员角色的用户为该新用户分配正确的角色。

现在的问题是,第一个管理员来自哪里?我们的客户获取了我们的应用程序,并打开了SAML SSO,现在数据库中还没有用户,那么如何解决此类引导问题?有什么标准的方法吗?我们提出了不同的选择,但不确定哪个更好,每个选择的关注点是什么。

选项1,具有默认的内置管理员用户。内置用户有一个常规的本机登录页面,而无需通过IdP即可登录(如果启用了SAML SSO,则可以打开/关闭该选项)

选项2,在SAML SSO设置过程中,要求提供管理员用户名,以便我们在具有管理员角色的数据库中自动创建此用户。然后,当该用户通过IdP登录时,我们可以在数据库中匹配他。

还有哪些其他选择?

user-management saml application-design user-roles single-sign-on

6
推荐指数
1
解决办法
1959
查看次数