请与我分享您最喜欢的应用程序设计/设计模式以供PHP使用.我想知道的一些事情:
您无需回答所有这些,回答其中任何一个或几个都会有所帮助.
我问这个的原因是因为我已经厌倦了在PHP中编写重复的,丑陋的代码而我想为我的自由职业项目制作一个小框架,这将使编程更容易,让我专注于挑战/业务任务而不是形成验证,分页和其他平凡的活动,这些活动占PHP编程工作的80%
所有意见赞赏!
在大量关于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.cs:
public interface IRepository<TEntity> where TEntity : EntityBase
{ …Run Code Online (Sandbox Code Playgroud) 我一直在阅读罗伯特·马丁的清洁建筑,更具体地说是VIPER.
然后我遇到了这篇文章/ post Brigade的经验使用MVC替代,它描述了我目前正在做的事情.
在尝试在新的iOS项目上实现VIPER之后,我遇到了一些问题:
我试图使用命令提示符检索每个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>
有什么建议吗?
我有一些关于适配器模式的问题.我知道类适配器继承自adaptee,而对象适配器将adaptee作为对象而不是继承自它.
您何时在对象适配器上使用类适配器,反之亦然?另外,使用类适配器和对象适配器的权衡取舍有哪些权衡?
我正在编写一个包含多个公共类和方法的库,以及库本身使用的几个私有或内部类和方法.
在公共方法中,我有一个空检查和抛出这样的:
public int DoSomething(int number)
{
if (number == null)
{
throw new ArgumentNullException(nameof(number));
}
}
Run Code Online (Sandbox Code Playgroud)
但是这让我思考,我应该在什么级别添加参数null检查方法?我是否也开始将它们添加到私有方法?我应该只为公共方法做吗?
我正在寻找关于"如何以模块化方式设计应用程序"的指针,建议,链接,警告,想法甚至是轶事.我将在这个项目中使用python,但建议不一定要引用这种语言,尽管我只愿意实现基于OOP的设计.
这里有一些背景知道我来自哪里以及我想要实现的目标......
我的项目将是一个小型应用程序,它将使用Web服务并以各种方式显示结果,包括:
该应用程序将作为免费(语音)软件发布,因此我想让其他开发人员很容易编写插件/模块,这些插件/模块将扩展主应用程序的功能,而无需更改核心代码.
此时,插件本质上应该允许开发人员通过定义提供者,数据操作(如果有的话)以及将数据呈现给用户的方式来激活新的web服务.
我在使用drupal开发方面有丰富的经验,drupal具有强大的模块化方法,但也遵循非面向对象的设计,所以我怀疑对于python,drupal设计可能不是最佳解决方案.
如果这是至关重要的 - 核心将为GNU/Linux本地开发.
提前谢谢您的时间!
我遇到了不同的采访,问我为什么要使用封装?谁的要求实际上是封装?是程序用户吗?还是同事呢?还是保护代码免受黑客攻击?
随着项目的发展,依存关系和事件链也会不断增长,尤其是在覆盖的save()方法post_save和pre_save信号中。
例:
覆盖将A.save创建两个相关的对象A- B和C。当C被保存时,post_save信号被调用,做别的事情,等...
如何弄清楚这些事件的下巴?有没有办法可视化(自动生成)这样的链/流?我既没有寻找,ERD也没有任何Class图表。我需要确保在一个地方做一件事情不会影响项目另一侧的事情,所以简单的可视化将是最好的。
编辑
明确地说,我知道检查动态生成的信号几乎是不可能的。我只想检查所有(不是动态生成的)post_save,pre_save和重写的save方法并将其可视化,这样我就可以立即看到正在发生的事情以及何时发生的save事情。
software-design ×10
oop ×4
architecture ×3
c# ×2
python ×2
adapter ×1
cmd ×1
datamapper ×1
django ×1
flux ×1
ios ×1
modularity ×1
php ×1
reactjs ×1
redux ×1
refluxjs ×1
repository ×1
windows ×1