标签: software-design

您使用什么PHP应用程序设计/设计模式?

请与我分享您最喜欢的应用程序设计/设计模式以供PHP使用.我想知道的一些事情:

  • 文件夹的设计方式
  • 如何在PHP应用程序中使用对象oritentation
  • 您是否有处理CRUD,分页或任何其他常见任务的标准方法?
  • 你如何避免使用重复的代码?您对库/共享公共代码等的方法是什么?
  • 您可以通过哪些方式使代码更优雅?

您无需回答所有这些,回答其中任何一个或几个都会有所帮助.

我问这个的原因是因为我已经厌倦了在PHP中编写重复的,丑陋的代码而我想为我的自由职业项目制作一个小框架,这将使编程更容易,让我专注于挑战/业务任务而不是形成验证,分页和其他平凡的活动,这些活动占PHP编程工作的80%

所有意见赞赏!

php oop software-design

40
推荐指数
4
解决办法
9447
查看次数

存储库和数据映射器模式

在大量关于Repository和Data Mapper的阅读之后,我决定在测试项目中实现这些模式.由于我是这些人的新手,我想了解一下如何在一个简单的项目中实现这些.

杰里米·米勒说:

做一些非常重要的个人编码项目,你可以自由地尝试设计模式.

但我不知道我做了所有这些事情是对的.

这是我的项目结构:

在此输入图像描述

正如您所看到的,我将在下面详细介绍它们.

  • 域:项目域实体到这里我有一个简单的Personnel类,它继承自EntityBase类,EntityBase类有一个名为Id的属性.

    public int Id { get; set; }
    
    Run Code Online (Sandbox Code Playgroud)
  • Infrustructure:这是一个简单的数据访问层,有两个类.SqlDataLayer是一个简单的类,它继承自名为DataLayer的抽象类.在这里,我提供了以下代码的一些功能:

    public SQLDataLayer() {
        const string connString = "ConnectionString goes here";
        _connection = new SqlConnection(connString);
        _command = _connection.CreateCommand();
    }
    
    Run Code Online (Sandbox Code Playgroud)

添加参数到命令参数集合:

    public override void AddParameter(string key, string value) {
        var parameter = _command.CreateParameter();
        parameter.Value = value;
        parameter.ParameterName = key;

        _command.Parameters.Add(parameter);
    }
Run Code Online (Sandbox Code Playgroud)

执行DataReader:

    public override IDataReader ExecuteReader() {
        if (_connection.State == ConnectionState.Closed)
            _connection.Open();

        return _command.ExecuteReader();
    }
Run Code Online (Sandbox Code Playgroud)

等等.

  • 存储库:这里我试图实现存储库模式.IRepository是一个通用接口

IRepository.cs:

public interface IRepository<TEntity> where TEntity : EntityBase
{ …
Run Code Online (Sandbox Code Playgroud)

c# software-design datamapper repository

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

关于VIPER的问题 - 清洁架构

我一直在阅读罗伯特·马丁的清洁建筑,更具体地说是VIPER.

然后我遇到了这篇文章/ post Brigade的经验使用MVC替代,它描述了我目前正在做的事情.

在尝试在新的iOS项目上实现VIPER之后,我遇到了一些问题:

  • 演示者可以查询视图中的信息,还是"信息传递"总是从视图开始?例如,如果视图在演示者中触发了某个操作,但随后,根据通过该操作传递的参数,演示者可能需要更多信息.我的意思是:用户点击"doneWithState:",如果state =="something",从视图中获取信息以创建实体,如果state =="something else",则在视图中激活某些内容.我该如何处理这种情况?
  • 让我们说"模块"(VIPER组件组)决定以模态方式呈现另一个模块.谁应该负责决定第二个模块是以模态方式呈现,第一个模块的线框还是第二个模块的线框?
  • 另外,假设第二个模块的视图被推入导航控制器,应如何处理"后退"操作?我是否应该在第二个模块的视图控制器中手动设置一个"后退"按钮,该操作调用演示者,该调用器调用第二个模块的线框,该线框消除并告诉第一个模块的线框它被解除,以便第一个模块的视图控制器可能想要展示什么?
  • 不同的模块是应该仅通过线框还是通过演示者之间的代表进行对话?例如,如果应用程序导航到另一个模块,但之后用户按下"取消"或"保存"并且该选择需要返回并更改第一个模块中的某些内容(可能显示已保存的动画或删除某些内容) ).
  • 假设在地图上选择了一个引脚,而不是显示PinEditViewController.返回时,根据PinEditViewController上的使用操作,可能需要更改所选引脚的颜色.谁应该保持当前所选引脚,MapViewController,MapPresenter或MapWireframe的状态,以便让我知道,当返回时,哪个引脚应该改变颜色?

architecture software-design ios viper-architecture

37
推荐指数
2
解决办法
9900
查看次数

使用命令提示符查找每个CPU的CPU数和内核数

我试图使用命令提示符检索每个CPU的CPU数和内核数.我执行了以下命令:

wmic cpu get NumberOfCores, NumberOfLogicalProcessors/Format:List

我收到此错误: wmic' is not recognized as an internal or external command, operable program or batch file

我在Windows Server 2008 R2计算机上执行此操作.我相信'wmic'命令在这个窗口上是兼容的.

我运行命令promt的目录是'C:\ Windows>

有什么建议吗?

windows cmd software-design

34
推荐指数
4
解决办法
12万
查看次数

使用基于反应的应用中还原和回流的核心差异是什么?

最近我进行了一项关于开发电子商务网站的初步研究,发现还原回流都来自Facebook的通量架构,而且两者都很受欢迎.我对这两者之间的区别感到困惑.

什么时候应该使用redux vs reflux,哪个在电子商务Web应用程序的开发阶段最灵活?

software-design flux reactjs refluxjs redux

33
推荐指数
2
解决办法
2万
查看次数

适配器模式:类适配器与对象适配器

我有一些关于适配器模式的问题.我知道类适配器继承自adaptee,而对象适配器将adaptee作为对象而不是继承自它.

您何时在对象适配器上使用类适配器,反之亦然?另外,使用类适配器和对象适配器的权衡取舍有哪些权衡?

oop design-patterns software-design adapter

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

我应该在私有/内部方法中抛出null参数吗?

我正在编写一个包含多个公共类和方法的库,以及库本身使用的几个私有或内部类和方法.

在公共方法中,我有一个空检查和抛出这样的:

public int DoSomething(int number)
{
    if (number == null)
    {
        throw new ArgumentNullException(nameof(number));
    }
}
Run Code Online (Sandbox Code Playgroud)

但是这让我思考,我应该在什么级别添加参数null检查方法?我是否也开始将它们添加到私有方法?我应该只为公共方法做吗?

c# language-agnostic exception-handling software-design

29
推荐指数
6
解决办法
2550
查看次数

如何以模块化方式设计应用程序?

我正在寻找关于"如何以模块化方式设计应用程序"的指针,建议,链接,警告,想法甚至是轶事.我将在这个项目中使用python,但建议不一定要引用这种语言,尽管我只愿意实现基于OOP的设计.

这里有一些背景知道我来自哪里以及我想要实现的目标......


我的项目将是一个小型应用程序,它将使用Web服务并以各种方式显示结果,包括:

  • 通知弹出窗口仅包含调用的结果
  • 应用程序主窗口中的选项卡,其中包含从检索到的原始数据绘制的图形
  • 消息的缓冲区(在domand上可见),其中各种服务的结果将堆积起来

该应用程序将作为免费(语音)软件发布,因此我想让其他开发人员很容易编写插件/模块,这些插件/模块将扩展主应用程序的功能,而无需更改核心代码.

此时,插件本质上应该允许开发人员通过定义提供者,数据操作(如果有的话)以及将数据呈现给用户的方式来激活新的web服务.

我在使用drupal开发方面有丰富的经验,drupal具有强大的模块化方法,但也遵循非面向对象的设计,所以我怀疑对于python,drupal设计可能不是最佳解决方案.

如果这是至关重要的 - 核心将为GNU/Linux本地开发.

提前谢谢您的时间!

python oop design-patterns modularity software-design

23
推荐指数
2
解决办法
1万
查看次数

为什么封装是OOP语言的一个重要特性?

我遇到了不同的采访,问我为什么要使用封装?谁的要求实际上是封装?是程序用户吗?还是同事呢?还是保护代码免受黑客攻击?

architecture oop encapsulation software-design

22
推荐指数
5
解决办法
2万
查看次数

Django-如何可视化信号并保存替代?

随着项目的发展,依存关系和事件链也会不断增长,尤其是在覆盖的save()方法post_savepre_save信号中。

例:

覆盖将A.save创建两个相关的对象A- BC。当C被保存时,post_save信号被调用,做别的事情,等...

如何弄清楚这些事件的下巴?有没有办法可视化(自动生成)这样的链/流?我既没有寻找,ERD也没有任何Class图表。我需要确保在一个地方做一件事情不会影响项目另一侧的事情,所以简单的可视化将是最好的。

编辑

明确地说,我知道检查动态生成的信号几乎是不可能的。我只想检查所有(不是动态生成的)post_savepre_save和重写的save方法并将其可视化,这样我就可以立即看到正在发生的事情以及何时发生的save事情。

python architecture django software-design

20
推荐指数
2
解决办法
528
查看次数