标签: software-design

应该何时更新UI?

我正在为我的教师的学生开发一个在线工具来计算他们学位的最终成绩,有一段时间我没有遇到什么问题.学生似乎喜欢使用新的用户界面,我一段时间没有受到任何批评.现在,我需要为程序添加一些功能,这意味着UI必须略有可能,但在一些非常明显的地方.

在观看整个新Facebook的事情开始之后,以及在这里SO和MS Office上的功能区收到混合评论的应用程序的计划,我想知道如果用户似乎喜欢用户界面是否真的应该改变它.是否应该在多年后更新UI以保持用户感兴趣/更高效?为了清洁用户界面,应该阻止功能吗?

layout user-interface software-design

3
推荐指数
1
解决办法
247
查看次数

什么是最重要的结构化软件设计原则?

今天我看到了一份工作描述,要求"用C++编写重要的经验,并在结构化设计原则方面进行彻底的基础",所以我想到了这些原则是什么.首先我觉得用一个句子看C++和"结构化设计"有点奇怪,然后我想,OK C++是一种多范式编程语言,所以也许它像C一样使用.我也查了一下维基百科页面并阅读关于异常处理和状态机是反结构化设计(毫不奇怪),但我仍然觉得很多东西都缺失了.所以我问你,最重要的结构化软件设计原则是什么?

language-agnostic programming-languages software-design design-principles

3
推荐指数
2
解决办法
2471
查看次数

何时使用getInstanceOf而不是构造函数

几个月前,我参加了由两位独立软件开发公司代表主持的演讲.它主要是关于良好的软件设计和实践.

这两个人主要谈论Java,我记得他们说,在某些情况下,使用getInstanceOf()而不是构造函数是一个很好的做法.它与总是从不同的类而不是构造函数调用getInstanceOf()有关,它是如何在更大规模的项目中更好的方法.

正如你所看到的,我现在记不起来了:/但我记得他们使用的论据确实令人信服.我想知道你们有没有遇到过这样的设计,你知道它什么时候有用吗?或者你认为它根本不存在?

java constructor software-design

3
推荐指数
2
解决办法
3105
查看次数

Port Delphi 7对C#的数据访问

我们有一个用Delphi 7编写的客户端/服务器应用程序,带有Firebird后端数据库.该代码最初是以数据访问层开始的,但很快就分解为表单中的数据访问和分散在项目中的不同单元.

我们希望在不久的将来转移到.NET,在我看来,最好的起点是首先在.NET中移动DAL并使用当前的Delphi应用程序来实现它.然后我们可以进一步移植业务层,最后是UI.

因此,我正在寻找其他开发人员关于某些技术/框架的一些想法,以便将DAL转移到.NET中.我的第一个想法是创建一些Web服务.我们的想法是将当前的客户端/服务器应用程序移动到.NET.我们可以在以后与多层设计,Web应用程序进行对战.也许正确的答案是从头开始?

任何想法或想法将不胜感激.

c# delphi data-access-layer software-design

3
推荐指数
1
解决办法
500
查看次数

在决定产品开发的软件设计/架构方面需要帮助吗?

关于基于在线Web的软件应用程序,我们在决定产品开发方法时面临困难.

我们正在开发有可能作为SAAS服务提供的在线Web应用程序的系统设计.我们在决定以下系统设计和实施相关决策方面遇到了困难,也有很多成本考虑.

方法A:

我们设计和开发所有内容以考虑满足基本要求的非常基本的要求,并解决手头的问题并启动它.一个足够好的系统,可以支持几百个用户,而不必过多地关注微优化一切.

我们通过添加新模块在客户端请求时添加新功能.

因此,简单的设计,单一的开发,在必要时通过升级基础设施或在需要时进行优化来扩展,并且可能在将来需要的全新系统替换系统.

我们保留相同的服务器,但客户帐户的数据库不同.同样,为每个客户端托管不同的应用程序访问单独的数据库等.当需要时,我们可能会添加新服务器.虽然很难管理/维护和升级.

方法B:

我们研究了完整的要求,可能添加的功能可能会增加额外的价值(尽管我们仍然不确定哪些附加功能会增加多少价值?)并设计支持大量用户的系统(具有大量硬件) ) 从开始.

我们推出功能齐全的应用程序,从一开始就进行了非常好的优化.

我们将其设计为支持单个数据库和应用程序托管中的多个客户帐户,并在云服务器/负载平衡服务器上实现它,其架构就像成熟的SAAS应用程序.虽然这使得编码和维护变得非常困难.绝对需要更多时间来实施.

注意,

我们准备了我们可能正在使用的功能列表,UI和可能的技术设置.我想了解解决这种情况的最佳方法.

正如我之前看到的另一个产品开发项目那样,通过所有功能的集合,它需要很长时间才能完成,甚至它具有根本没有被使用的这些功能.这些项目的成本考虑非常高,我更倾向于采用方法A,因为这是快速,简单和可预测的.此外,与第二种方法相比,我很快就会收到用户反馈,这可能有助于我决定要关注哪些功能以及原因.此外,当需要时,我们可能会重写整个应用程序,重点关注类似于方法B的系统.

我想了解其他公司如何处理这种情况,以及实施此类项目的最佳方式是什么?

architecture design-patterns software-design

3
推荐指数
1
解决办法
1146
查看次数

为个人/客户建模联系人详细信息

我想知道是否有一种更优雅的方式来管理个人的联系方式.暂时忘记SQL方面,我很想知道如何通过DDD方法尝试驱动它.

为了让DDD作为一个整体感到舒服,我正在愚弄一些代码并提出以下看起来很糟糕.

首先,我有一个名为Person的对象(为了这个帖子的目的而简化),我设想了添加和实质上管理不同的个人沟通方法的方法.

public class Person
{
    public Person()
    {
        this.ContactDetails = new List<ContactDetails>();
    }

    public void AssociateContactDetails(ContactDetails contactDetails)
    {
        var existingContactDetails = this.ContactDetails.FirstOrDefault(x => x.ContactType == contactDetails.ContactType);

        if (existingContactDetails != null)
        {
            this.ContactDetails.Remove(existingContactDetails);
        }

        this.ContactDetails.Add(contactDetails);
    }

    public IList<ContactDetails> ContactDetails { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

我想到了两种方法.我有一个相当简单的对象,如下面的那个是非常通用的(使用松散的术语).

public enum ContactType
{
    Email, Telephone, Mobile, Post
}   

public class ContactDetails
{
    private readonly ContactType contactType;
    private readonly string value;

    public ContactDetails(ContactType contactType, string value)
    {
        this.contactType = contactType;
        this.value = value; …
Run Code Online (Sandbox Code Playgroud)

c# domain-driven-design software-design

3
推荐指数
1
解决办法
1490
查看次数

我应该用哪种设计模式来设置竞赛点数?

我有一个类,AthleticCompetitionResults并希望创建一个类,方法返回AthleticCompetitionResults从行初始化的对象,例如

Siim Susi; 12.61; 5.00; 9.22; 1.50; 60.39; 16.43; 21.60; 2.60; 35.81; 5.25.72

Siim Susi2; 12.61; 5.00; 9.22; 1.50; 60.39; 16.43; 21.60; 2.60; 35.81; 5.25.72

Jaana Lind; 13.75; 4.84; 10.12; 1.50; 68.44; 19.18; 30.85; 2.80; 33.88; 6.22.75

public class AthleticCompetitionResults {
  private Athletic athletic;
  private float resultM100;
  private float resultLongJump;
  private float resultShotPut;
  private float resultHighJump;
  private float resultM400;
  private float resultHurdles110m;
  private float resultDiscusThrow;
  private float resultPoleVault;
  private float resultJavelinThrow;
  private float resultM1500;
  private int …
Run Code Online (Sandbox Code Playgroud)

java design-patterns software-design

3
推荐指数
1
解决办法
210
查看次数

公共只读List <T>糟糕的设计?

我目前正在编写一个应用程序,它建立与某种服务的连接,以一些DataTable对象的形式获取数据,然后应该向用户显示它.
为了存储数据,我得到我做了一个叫做类DataStorage具有List<DataTable>.其他类需要能够编辑此List,例如添加所需的对象或在用户发现不需要时删除它们.如果我需要一组全新的数据,我还必须能够清除它.
我可以DataStorage为此提供方法,但由于List<T>已经提供了这些,我认为没有必要像这样封装它.所以我这样做是readonly为了确保没有人试图分配一个新对象 - 甚至更糟糕的是null- 并制作了访问修饰符public.
这种设计是否可以接受,或者我应该始终保护字段免受直接访问,无论如何?

c# oop software-design

3
推荐指数
1
解决办法
128
查看次数

通过访问器方法封装java.util.Properties访问被认为是不好的做法?

我正在使用java.util.Properties我正在进行的项目.我有一个类,用一个Properties名为.properties的文件管理.properties文件PropertiesManager.此类管理从光盘加载和保存.properties文件.

现在,因为我想确保只能访问有效的属性,并且只要属性不在文件中,就会使用默认值,我为文件的每个属性添加了getter和setter.

问题在于使课程变得PropertiesManager非常大.单独的getter和setter(带注释/空行)是300行代码.因此,即使我将加载/保存转移到另一个类(继承等),它仍然是大的.

这不是实际的代码,但它给你的想法:

import java.util.Properties;

public class PropertiesManager {
    private Properties properties;

    public PropertiesManager() {
        // constructor
    }

    private void save() {
        // save in .properties file
    }

    private void load() {
        // load from .properties file
    }

    public String getPropertyName1() {
        return properties.getProperty("PropertyName1", "Property1DefaultValue");
    }

    // 28 more getters here

    public String getPropertyName30() {
        return properties.getProperty("PropertyName30", "Property30DefaultValue");
    }

    public void setPropertyName1(String value) {
        properties.setProperty("PropertyName1", value);
    }

    // 28 more more …
Run Code Online (Sandbox Code Playgroud)

java encapsulation software-design

3
推荐指数
1
解决办法
163
查看次数

实例化新对象与实现reset()方法

我目前正在用Java创建一个5张牌抽奖扑克游戏的控制台实现.

我有一个名为HandOfCards的课程,它将处理个人手牌的程序 - 交易玩家的牌,下注并确定获胜者.我还有一个名为GameOfPoker的课程,它可以帮助多人扑克,代表一场扑克游戏.

我将为GameOfPoker构造HandOfPoker实例:

HandOfPoker handOfPoker = new HandOfPoker(List<PokerPlayer> players, DeckOfCards deck);
Run Code Online (Sandbox Code Playgroud)

我的问题是,在GameOfPoker中,我应该实例化一个新对象,还是应该在HandOfPoker中定义一个reset方法:

public class HandOfPoker{    
  public void reset(List<PokerPlayer> players) {
    this.players = players;
  }
}

public class GameOfPoker{
  public play() {
    // carry out game
    // then after a hand, I could either instantiate:
    //handOfPoker = new HandOfPoker(players, deck);
    // or I could reset:
    handOfPoker.reset();
    // now I'm ready to play another hand.
  }
}
Run Code Online (Sandbox Code Playgroud)

直观地说,感觉就像reset()方法看起来更好 - 因为实例化一个新对象似乎更昂贵,因为必须创建一个新实例,而旧的实例必须被删除.

这里是否有最佳实践方法,或两种方法之间的差异是否足够小以至于无关紧要?

java oop software-design object

3
推荐指数
1
解决办法
547
查看次数